get("sign in again", false); $alerttype = "info"; } /* Authenticate user */ $username_ok = false; $multiauth = false; $change_password = false; if ($VARS['progress'] == "1") { engageRateLimit(); if (!CAPTCHA_ENABLED || (CAPTCHA_ENABLED && verifyCaptcheck($VARS['captcheck_session_code'], $VARS['captcheck_selected_answer'], CAPTCHA_SERVER . "/api.php"))) { $autherror = ""; if (user_exists($VARS['username'])) { $status = get_account_status($VARS['username'], $error); switch ($status) { case "LOCKED_OR_DISABLED": $alert = $Strings->get("account locked", false); break; case "TERMINATED": $alert = $Strings->get("account terminated", false); break; case "CHANGE_PASSWORD": $alert = $Strings->get("password expired", false); $alerttype = "info"; $_SESSION['username'] = strtolower($VARS['username']); $_SESSION['uid'] = $database->get('accounts', 'uid', ['username' => strtolower($VARS['username'])]); $change_password = true; break; case "NORMAL": $username_ok = true; break; case "ALERT_ON_ACCESS": $mail_resp = sendLoginAlertEmail($VARS['username']); if (DEBUG) { var_dump($mail_resp); } $username_ok = true; break; default: if (!is_empty($error)) { $alert = $error; } else { $alert = $Strings->get("login error", false); } break; } if ($username_ok) { if (authenticate_user($VARS['username'], $VARS['password'], $autherror)) { $_SESSION['passok'] = true; // stop logins using only username and authcode if (userHasTOTP($VARS['username'])) { $multiauth = true; $_SESSION['password'] = $VARS['password']; } else { doLoginUser($VARS['username'], $VARS['password']); insertAuthLog(1, $_SESSION['uid']); header('Location: home.php'); die("Logged in, go to home.php"); } } else { if (!is_empty($autherror)) { $alert = $autherror; insertAuthLog(2, null, "Username: " . $VARS['username']); } else { $alert = $Strings->get("login incorrect", false); insertAuthLog(2, null, "Username: " . $VARS['username']); } } } } else { // User does not exist anywhere $alert = $Strings->get("login incorrect", false); insertAuthLog(2, null, "Username: " . $VARS['username']); } } else { $alert = $Strings->get("captcha error", false); insertAuthLog(8, null, "Username: " . $VARS['username']); } } else if ($VARS['progress'] == "2") { engageRateLimit(); if ($_SESSION['passok'] !== true) { // stop logins using only username and authcode sendError("Password integrity check failed!"); } if (verifyTOTP($VARS['username'], $VARS['authcode'])) { doLoginUser($VARS['username'], $VARS['password']); insertAuthLog(1, $_SESSION['uid']); header('Location: home.php'); die("Logged in, go to home.php"); } else { $alert = $Strings->get("2fa incorrect", false); insertAuthLog(6, null, "Username: " . $VARS['username']); } } else if ($VARS['progress'] == "chpasswd") { engageRateLimit(); if (!is_empty($_SESSION['username'])) { $error = []; $result = change_password($VARS['oldpass'], $VARS['newpass'], $VARS['conpass'], $error); if ($result === TRUE) { $alert = $Strings->get(MESSAGES["password_updated"]["string"], false); $alerttype = MESSAGES["password_updated"]["type"]; } switch (count($error)) { case 0: break; case 1: $alert = $Strings->get(MESSAGES[$error[0]]["string"], false); $alerttype = MESSAGES[$error[0]]["type"]; break; case 2: $alert = $Strings->build(MESSAGES[$error[0]]["string"], ["arg" => $error[1]], false); $alerttype = MESSAGES[$error[0]]["type"]; break; default: $alert = $Strings->get(MESSAGES["generic_op_error"]["string"], false); $alerttype = MESSAGES["generic_op_error"]["type"]; } } else { session_destroy(); header('Location: index.php'); die(); } } ?>