Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,5 @@ AGENTS.md
tests/Browser/Screenshots/
tests/Browser/screenshots/
tests/Browser/.session_state.json

docs
13 changes: 8 additions & 5 deletions app/Http/Controllers/Api/Auth/AuthController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
}
Expand Down Expand Up @@ -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.";
}
Expand Down
13 changes: 7 additions & 6 deletions app/Http/Controllers/Auth/LoginController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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}.",
]);
}

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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,
];
}
Expand Down
2 changes: 1 addition & 1 deletion app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)));
}

/**
Expand Down
1 change: 1 addition & 0 deletions catatan_rilis.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down