= 16; $error = null; // Why the previous session ended (whitelisted values only). $notices = [ 'elsewhere' => 'Akun Anda masuk dari perangkat atau browser lain, sehingga sesi ini diakhiri. Masuk lagi untuk melanjutkan.', 'password' => 'Password akun ini telah diganti. Silakan masuk dengan password baru.', 'inactive' => 'Sesi diakhiri karena akun tidak aktif.', 'expired' => 'Waktu verifikasi habis. Silakan masuk lagi.', 'otp' => 'Terlalu banyak kode OTP salah. Silakan masuk lagi dalam ' . LOGIN_WINDOW_MIN . ' menit.', ]; $notice = $notices[input_str($_GET['reason'] ?? '')] ?? null; $username = ''; $name = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { csrf_check(); $username = strtolower(trim(input_str($_POST['username'] ?? ''))); $password = input_str($_POST['password'] ?? ''); // The CAPTCHA is checked first, before any password is verified. $captchaOk = captcha_check(input_str($_POST['captcha'] ?? '')); if (login_locked()) { $error = 'Terlalu banyak percobaan gagal dari jaringan ini. Coba lagi dalam ' . LOGIN_WINDOW_MIN . ' menit.'; } elseif (!$captchaOk) { $error = 'Kode keamanan (CAPTCHA) salah atau kedaluwarsa. Ketik kode pada gambar yang baru.'; } elseif ($setup) { $name = trim(input_str($_POST['full_name'] ?? '')); $sentKey = input_str($_POST['setup_key'] ?? ''); if (!$setupAllowed) { $error = 'Pembuatan admin pertama tidak diizinkan dari sini.'; } elseif (!hash_equals($setupKey, $sentKey)) { db()->prepare('INSERT INTO login_attempts (ip, username, success) VALUES (?,?,0)')->execute([client_ip(), 'setup']); $error = 'Kode setup salah.'; } else { $error = validate_new_admin($username, $name, $password, input_str($_POST['password_confirm'] ?? '')); } if (!$error && admin_count() === 0) { // The first admin is the super admin; the authenticator is set up next. db()->prepare("INSERT INTO admins (username, full_name, role, password_hash) VALUES (?,?,'super_admin',?)") ->execute([$username, $name, password_hash($password, PASSWORD_DEFAULT)]); db()->prepare("INSERT INTO audit_log (action, summary, ip) VALUES ('user.create', ?, ?)") ->execute(["Membuat akun admin pertama: $username", client_ip()]); begin_second_factor(verify_credentials($username, $password)); redirect(base_url('admin/2fa.php')); } } elseif ($row = verify_credentials($username, $password)) { begin_second_factor($row); redirect(base_url('admin/2fa.php')); } else { $error = 'Username atau password salah.'; } } captcha_new(); // every rendered form gets a fresh challenge $captchaQuestion = captcha_question(); ?> <?= $setup ? 'Buat Akun Admin' : 'Masuk Admin' ?> ยท SERUBI
SERUBI

Belum ada admin. Buat admin pertama dari konsol server:
php database/migrate.php --create-admin
atau isi security.setup_key (minimal 16 karakter) di config.php.

>

Kode dari security.setup_key di config.php.

>

Minimal 10 karakter, berisi huruf, angka, dan simbol.

Kode keamanan berupa gambar 5 karakter

Ketik 5 karakter pada gambar. Ganti gambar

Kembali ke kalkulator