generate(time()), $totp->generate(time() - 30), $totp->generate(time() + 30), ]; if(!in_array($twofactor['code'], $acceptedCodes)) { $notices[] = sprintf( "Invalid two factor code, %d attempt%s remaining", $remainingAttempts - 1, $remainingAttempts === 2 ? '' : 's' ); user_login_attempt_record(false, $tokenInfo['user_id'], $ipAddress, $userAgent); break; } user_login_attempt_record(true, $tokenInfo['user_id'], $ipAddress, $userAgent); $sessionKey = user_session_create($tokenInfo['user_id'], $ipAddress, $userAgent); if(empty($sessionKey)) { $notices[] = "Something broke while creating a session for you, please tell an administrator or developer about this!"; break; } user_auth_tfa_token_invalidate($tokenInfo['tfa_token']); user_session_start($tokenInfo['user_id'], $sessionKey); $cookieLife = strtotime(user_session_current('session_expires')); $cookieValue = Base64::encode(user_session_cookie_pack($tokenInfo['user_id'], $sessionKey), true); setcookie('msz_auth', $cookieValue, $cookieLife, '/', '', !empty($_SERVER['HTTPS']), true); if(!is_local_url($redirect)) { $redirect = url('index'); } redirect($redirect); return; } Template::render('auth.twofactor', [ 'twofactor_notices' => $notices, 'twofactor_redirect' => !empty($_GET['redirect']) && is_string($_GET['redirect']) ? $_GET['redirect'] : url('index'), 'twofactor_attempts_remaining' => $remainingAttempts, 'twofactor_token' => $tokenInfo['tfa_token'], ]);