diff --git a/.gitignore b/.gitignore index aaec50462..f8f7fa7da 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,5 @@ AGENTS.md tests/Browser/Screenshots/ tests/Browser/screenshots/ tests/Browser/.session_state.json + +docs \ No newline at end of file diff --git a/app/Http/Controllers/Api/Auth/AuthController.php b/app/Http/Controllers/Api/Auth/AuthController.php index 21f6a060f..215ee363c 100644 --- a/app/Http/Controllers/Api/Auth/AuthController.php +++ b/app/Http/Controllers/Api/Auth/AuthController.php @@ -48,10 +48,10 @@ public function login(Request $request) // Check if account is locked if ($user && $user->isLocked()) { $remainingSeconds = $user->getLockoutRemainingSeconds(); - $minutes = ceil($remainingSeconds / 60); + $timeText = $remainingSeconds < 60 ? "{$remainingSeconds} detik" : ceil($remainingSeconds / 60) . " menit"; return response()->json([ - 'message' => "AKUN TERKUNCI. Terlalu banyak gagal login. Coba lagi dalam {$minutes} menit.", + 'message' => "AKUN TERKUNCI. Terlalu banyak gagal login. Coba lagi dalam {$timeText}.", 'locked' => true, 'retry_after' => $remainingSeconds, ], Response::HTTP_FORBIDDEN); @@ -62,9 +62,10 @@ public function login(Request $request) event(new Lockout($request)); $seconds = RateLimiter::availableIn($this->throttleKey()); + $timeText = $seconds < 60 ? "{$seconds} detik" : ceil($seconds / 60) . " menit"; return response()->json([ - 'message' => 'TERLALU BANYAK PERCobaAN. Silakan tunggu ' . ceil($seconds / 60) . ' menit sebelum mencoba lagi.', + 'message' => "TERLALU BANYAK PERCOBAAN. Silakan tunggu {$timeText} sebelum mencoba lagi.", 'retry_after' => $seconds, ], Response::HTTP_TOO_MANY_REQUESTS); } @@ -92,9 +93,11 @@ public function login(Request $request) // Add lockout warning if ($result['locked']) { - $response['message'] = "AKUN TERKUNCI. Terlalu banyak gagal login ({$result['attempts']} kali)."; + $remainingSeconds = $result['lockout_expires_in'] ?? 900; + $timeText = $remainingSeconds < 60 ? "{$remainingSeconds} detik" : ceil($remainingSeconds / 60) . " menit"; + $response['message'] = "AKUN TERKUNCI. Terlalu banyak gagal login ({$result['attempts']} kali). Coba lagi dalam {$timeText}."; $response['locked'] = true; - $response['lockout_expires_in'] = $result['lockout_expires_in'] ?? 900; + $response['lockout_expires_in'] = $remainingSeconds; } elseif ($result['remaining'] === 0) { $response['message'] = "PERINGATAN: Akun akan terkunci setelah {$result['attempts']} kali gagal login."; } diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 2c497d3ea..2caa99612 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -85,10 +85,10 @@ protected function checkAccountLockout(Request $request) if ($user && $user->isLocked()) { $remainingSeconds = $user->getLockoutRemainingSeconds(); - $minutes = ceil($remainingSeconds / 60); + $timeText = $remainingSeconds < 60 ? "{$remainingSeconds} detik" : ceil($remainingSeconds / 60) . " menit"; throw ValidationException::withMessages([ - $this->username() => "AKUN TERKUNCI. Terlalu banyak gagal login. Coba lagi dalam {$minutes} menit.", + $this->username() => "AKUN TERKUNCI. Terlalu banyak gagal login. Coba lagi dalam {$timeText}.", ]); } @@ -116,8 +116,9 @@ protected function recordFailedLoginAttempt(Request $request) $result = $user->recordFailedLogin(); if ($result['locked']) { - $minutes = ceil($result['lockout_expires_in'] / 60); - $message = "AKUN TERKUNCI. Terlalu banyak gagal login ({$result['attempts']} kali). Coba lagi dalam {$minutes} menit."; + $remainingSeconds = $result['lockout_expires_in'] ?? 900; + $timeText = $remainingSeconds < 60 ? "{$remainingSeconds} detik" : ceil($remainingSeconds / 60) . " menit"; + $message = "AKUN TERKUNCI. Terlalu banyak gagal login ({$result['attempts']} kali). Coba lagi dalam {$timeText}."; } elseif ($result['remaining'] === 0) { $message = "PERINGATAN: Akun akan terkunci setelah {$result['attempts']} kali gagal login."; } else { @@ -323,11 +324,11 @@ protected function checkUserLockoutById($userId) if ($user && $user->isLocked()) { $remainingSeconds = $user->getLockoutRemainingSeconds(); - $minutes = ceil($remainingSeconds / 60); + $timeText = $remainingSeconds < 60 ? "{$remainingSeconds} detik" : ceil($remainingSeconds / 60) . " menit"; return [ 'locked' => true, - 'message' => "AKUN TERKUNCI. Terlalu banyak gagal login. Coba lagi dalam {$minutes} menit.", + 'message' => "AKUN TERKUNCI. Terlalu banyak gagal login. Coba lagi dalam {$timeText}.", 'retry_after' => $remainingSeconds, ]; } diff --git a/app/Models/User.php b/app/Models/User.php index a2573fbb0..2e32e2c04 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -326,7 +326,7 @@ public function getLockoutRemainingSeconds(): int return 0; } - return max(0, $this->lockout_expires_at->diffInSeconds(now())); + return (int) max(0, ceil(now()->diffInSeconds($this->lockout_expires_at, false))); } /** diff --git a/catatan_rilis.md b/catatan_rilis.md index 745fecdd0..f214e9ae2 100644 --- a/catatan_rilis.md +++ b/catatan_rilis.md @@ -5,6 +5,7 @@ Di rilis ini, versi 2607.0.0 berisi penambahan dan perbaikan yang diminta penggu #### Perbaikan BUG 1. [#1094](https://github.com/OpenSID/OpenKab/issues/1094) Perbaikan pangan error data table. +2. [#1098](https://github.com/OpenSID/OpenKab/issues/1098) Perbaikan tampilan durasi lockout akun login (menit dan detik) serta koreksi perhitungan selisih waktu carbon. #### Perubahan Teknis