Files
2026-08-20 18:39:37 +07:00

470 lines
14 KiB
PHP

<?php
include "config/connect.php";
include 'list_data/sweetalert.php';
include 'config/tanggal_indo.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>ManjaPro</title>
<!-- Google Font: Source Sans Pro -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback">
<!-- Font Awesome -->
<link rel="stylesheet" href="plugins/fontawesome-free/css/all.min.css">
<!-- icheck bootstrap -->
<link rel="stylesheet" href="plugins/icheck-bootstrap/icheck-bootstrap.min.css">
<!-- Theme style -->
<link rel="stylesheet" href="dist/css/adminlte.min.css">
<!-- Icon Aplikasi -->
<link rel="icon" href="dist/img/logo-sm.png" type="image/gif" />
<!-- SweetAlert -->
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</head>
<body class="hold-transition login-page">
<div class="login-box" style="zoom: 115%;">
<div class="card card-outline card-primary">
<div class="card-header text-center">
<img src="dist/img/logo-login.png" width="150px" class="mt-4"><br>
<p>
<small>Managemen Jaringan Propesional</small>
</p>
</div>
<div class="card-body">
<p class="login-box-msg">Masuk Aplikasi</p>
<form method="post">
<!-- Username / Email -->
<div class="input-group mb-3">
<input
type="text"
class="form-control"
id="username"
name="username"
placeholder="Username / Email"
value="<?= isset($_POST['username']) ? htmlspecialchars($_POST['username']) : ''; ?>"
required
>
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<!-- Password -->
<div class="input-group mb-4">
<input
type="password"
class="form-control"
id="password"
name="password"
placeholder="Password"
required
>
<div class="input-group-append">
<div class="input-group-text" style="cursor:pointer;">
<span class="fas fa-eye" id="toggle-password"></span>
</div>
</div>
</div>
<div class="row">
<div class="col-8">
<small>
<a href="lupa_password" class="mb-3">
Lupa Password ?
</a>
<br>
<a href="<?= $BaseUrl; ?>">
Kembali ke Halaman Utama
</a>
</small>
</div>
<div class="col-4">
<input
type="submit"
name="login"
class="btn btn-primary btn-block"
value="Masuk"
/>
</div>
</div>
</form>
<br>
<?php
if (isset($_POST['login'])) {
// =====================================================
// AMBIL INPUT
// =====================================================
$username = trim($_POST['username'] ?? '');
$password = $_POST['password'] ?? '';
$waktu = date('Y-m-d H:i:s');
// =====================================================
// VALIDASI INPUT
// =====================================================
if ($username === '' || $password === '') {
sweetAlert(
"Username dan Password harus diisi",
"error"
);
} else {
try {
// =====================================================
// HAPUS SESSION LOGIN LAMA
// =====================================================
unset($_SESSION['master']);
unset($_SESSION['user']);
unset($_SESSION['wajib_update_akun']);
unset($_SESSION['update_akun_id']);
unset($_SESSION['update_akun_tipe']);
// =====================================================
// 1. CEK DATA_SERVER
// =====================================================
$stmt = $pdo->prepare("
SELECT
id,
nama_pemilik,
username,
email,
akses,
profile,
password
FROM data_server
WHERE username = :username
OR email = :username
LIMIT 1
");
$stmt->execute([
':username' => $username
]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
// =====================================================
// JIKA DITEMUKAN DI DATA_SERVER
// =====================================================
if ($user) {
if (password_verify($password, $user['password'])) {
// ---------------------------------------------
// Update last_login
// ---------------------------------------------
$stmtUpdate = $pdo->prepare("
UPDATE data_server
SET last_login = :waktu
WHERE id = :id
");
$stmtUpdate->execute([
':waktu' => $waktu,
':id' => $user['id']
]);
// ---------------------------------------------
// Cek standar username dan password
// ---------------------------------------------
$usernameKurang = mb_strlen($user['username']) < 6;
$passwordKurang = strlen($password) < 8;
// ---------------------------------------------
// Jika username/password belum memenuhi standar
// ---------------------------------------------
if ($usernameKurang || $passwordKurang) {
session_regenerate_id(true);
$_SESSION['wajib_update_akun'] = true;
$_SESSION['update_akun_id'] = $user['id'];
$_SESSION['update_akun_tipe'] = 'master';
header("Location: update_akun.php");
exit;
}
// ---------------------------------------------
// Login normal
// ---------------------------------------------
session_regenerate_id(true);
$_SESSION['master'] = $user['id'];
sweetAlert(
"Login Berhasil",
"success",
baseurl()
);
} else {
sweetAlert(
"Login Gagal.. Username atau Password Tidak terdaftar",
"error"
);
}
} else {
// =====================================================
// 2. CEK USER_AKSES
// =====================================================
//
// Hanya user status ACTIVE yang boleh login
//
$stmt = $pdo->prepare("
SELECT
id,
id_data_server,
id_group_akses,
nama,
nomor_whatsapp,
username,
password,
profile,
email,
status
FROM user_akses
WHERE (
username = :username
OR email = :username
)
AND status = 'active'
LIMIT 1
");
$stmt->execute([
':username' => $username
]);
$user1 = $stmt->fetch(PDO::FETCH_ASSOC);
// =====================================================
// USER_AKSES DITEMUKAN
// =====================================================
if ($user1) {
if (password_verify($password, $user1['password'])) {
// ---------------------------------------------
// Update last_login
// ---------------------------------------------
$stmtUpdate = $pdo->prepare("
UPDATE user_akses
SET last_login = :waktu
WHERE id = :id
");
$stmtUpdate->execute([
':waktu' => $waktu,
':id' => $user1['id']
]);
// ---------------------------------------------
// Cek standar username/password
// ---------------------------------------------
$usernameKurang = mb_strlen($user1['username']) < 6;
$passwordKurang = strlen($password) < 8;
// ---------------------------------------------
// Wajib update akun
// ---------------------------------------------
if ($usernameKurang || $passwordKurang) {
session_regenerate_id(true);
$_SESSION['wajib_update_akun'] = true;
$_SESSION['update_akun_id'] = $user1['id'];
$_SESSION['update_akun_tipe'] = 'user';
header("Location: update_akun.php");
exit;
}
// ---------------------------------------------
// Login normal
// ---------------------------------------------
session_regenerate_id(true);
$_SESSION['user'] = $user1['id'];
sweetAlert(
"Login Berhasil",
"success",
baseurl()
);
} else {
sweetAlert(
"Login Gagal.. Username atau Password Tidak terdaftar",
"error"
);
}
} else {
/*
* User tidak ditemukan.
*
* Termasuk user yang username/email benar
* tetapi status = inactive.
*
* Sengaja tidak dibedakan supaya informasi
* status akun tidak dibocorkan dari halaman login.
*/
sweetAlert(
"Login Gagal.. Username atau Password Tidak terdaftar atau akun tidak aktif",
"error"
);
}
}
} catch (PDOException $e) {
sweetAlert(
"Login Gagal.. Terjadi kesalahan pada sistem",
"error"
);
// Aktifkan hanya untuk debugging:
// error_log($e->getMessage());
}
}
}
?>
</div>
</div>
</div>
<!-- jQuery -->
<script src="plugins/jquery/jquery.min.js"></script>
<!-- Bootstrap 4 -->
<script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
<!-- AdminLTE App -->
<script src="dist/js/adminlte.min.js"></script>
<script>
document.getElementById('toggle-password').addEventListener('click', function() {
const passwordInput = document.getElementById('password');
if (passwordInput.type === 'password') {
passwordInput.type = 'text';
this.classList.remove('fa-eye');
this.classList.add('fa-eye-slash');
} else {
passwordInput.type = 'password';
this.classList.remove('fa-eye-slash');
this.classList.add('fa-eye');
}
});
</script>
</body>
</html>