diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/AuthController.php index 81338fc..88e5f03 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/AuthController.php @@ -8,45 +8,10 @@ use Illuminate\Http\Response; class AuthController extends Controller { - private int $captchaTtlSeconds = 120; private int $loginDecaySeconds = 60; private int $maxLoginAttempts = 10; - private function generateCaptchaCode(int $length = 6): string - { - // Avoid ambiguous chars: 0,O,1,I,l - $chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; - $out = ''; - $max = strlen($chars) - 1; - for ($i = 0; $i < $length; $i++) { - $out .= $chars[random_int(0, $max)]; - } - return $out; - } - - private function refreshCaptcha(): string - { - $captcha = $this->generateCaptchaCode(6); - session([ - 'login_captcha' => $captcha, - 'login_captcha_created_at' => now()->getTimestamp(), - ]); - - return $captcha; - } - - private function ensureCaptchaValid(): void - { - $createdAt = (int) session('login_captcha_created_at', 0); - $expired = $createdAt <= 0 || (now()->getTimestamp() - $createdAt) > $this->captchaTtlSeconds; - - if ($expired || (string) session('login_captcha', '') === '') { - $this->refreshCaptcha(); - } - } - public function index(){ - $this->refreshCaptcha(); $data = [ 'title' => 'Login Admin | Order Gizi' ]; @@ -57,7 +22,6 @@ class AuthController extends Controller $validated = $request->validate([ 'username' => 'required', 'password' => 'required', - 'captcha' => 'required', 'website' => 'nullable', ]); @@ -69,14 +33,6 @@ class AuthController extends Controller $now = time(); $rateKey = 'login:' . $request->ip() . ':' . strtolower((string) $request->input('username')); - - $this->ensureCaptchaValid(); - $expectedCaptcha = (string) session('login_captcha', ''); - $givenCaptcha = strtoupper(preg_replace('/\s+/', '', (string) $request->input('captcha', ''))); - // One-time use - $request->session()->forget('login_captcha'); - $request->session()->forget('login_captcha_created_at'); - // IMPORTANT: only pass auth credentials to Auth::attempt // (do not include captcha / honeypot fields, otherwise Laravel will query non-existent columns) $credentials = [ @@ -89,8 +45,6 @@ class AuthController extends Controller return redirect()->intended('/dashboard'); } - $this->refreshCaptcha(); - return back()->with(['alertError' => 'Gagal Login!']); } @@ -101,58 +55,4 @@ class AuthController extends Controller request()->session()->regenerateToken(); return redirect('/login'); } - - public function captcha(Request $request){ - $this->ensureCaptchaValid(); - $captcha = (string) session('login_captcha', ''); - - if (!function_exists('imagecreatetruecolor')) { - return response('GD extension is not available', Response::HTTP_INTERNAL_SERVER_ERROR) - ->header('Content-Type', 'text/plain'); - } - - $width = 140; - $height = 44; - $img = imagecreatetruecolor($width, $height); - - $bg = imagecolorallocate($img, 245, 247, 250); - $fg = imagecolorallocate($img, 35, 45, 70); - $noise = imagecolorallocate($img, 120, 130, 150); - - imagefilledrectangle($img, 0, 0, $width, $height, $bg); - - // noise lines - for ($i = 0; $i < 6; $i++) { - imageline( - $img, - random_int(0, $width), - random_int(0, $height), - random_int(0, $width), - random_int(0, $height), - $noise - ); - } - - // noise dots - for ($i = 0; $i < 180; $i++) { - imagesetpixel($img, random_int(0, $width - 1), random_int(0, $height - 1), $noise); - } - - // draw text (built-in font to avoid font dependency) - $font = 5; - $textWidth = imagefontwidth($font) * strlen($captcha); - $textHeight = imagefontheight($font); - $x = (int) (($width - $textWidth) / 2); - $y = (int) (($height - $textHeight) / 2); - imagestring($img, $font, $x, $y, $captcha, $fg); - - ob_start(); - imagepng($img); - $png = ob_get_clean(); - imagedestroy($img); - - return response($png, 200) - ->header('Content-Type', 'image/png') - ->header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0'); - } } diff --git a/resources/views/auth/index.blade.php b/resources/views/auth/index.blade.php index 7f1133d..a100a89 100644 --- a/resources/views/auth/index.blade.php +++ b/resources/views/auth/index.blade.php @@ -60,9 +60,7 @@
Please sign-in to your account
@if (session()->has('alertError'))