diff --git a/Animation Login.js b/Animation_Login.js similarity index 100% rename from Animation Login.js rename to Animation_Login.js diff --git a/Animation Register.js b/Animation_Register.js similarity index 100% rename from Animation Register.js rename to Animation_Register.js diff --git a/Connection.php b/Connection.php index d5cdfe2..b8b01b2 100644 --- a/Connection.php +++ b/Connection.php @@ -1,4 +1,9 @@ - - - - + + + - + \ No newline at end of file diff --git a/Login.js b/Login.js index 9ac2ce3..c06d647 100644 --- a/Login.js +++ b/Login.js @@ -1,5 +1,11 @@ -import { showModal, closeModal } from "./Modal Login.js"; -import { loginRequest } from "./API Login.js"; +import { showModal, setupModalOk, setupOutsideClose } from "./Modal_Login.js"; +import { loginRequest } from "./Login_Request.js"; + +// ✅ PENTING: Setup modal saat halaman load +document.addEventListener('DOMContentLoaded', function() { + setupModalOk(); + setupOutsideClose(); +}); document.getElementById('loginForm').addEventListener('submit', async function(e) { e.preventDefault(); @@ -7,95 +13,46 @@ document.getElementById('loginForm').addEventListener('submit', async function(e const username = document.getElementById('username').value.trim(); const password = document.getElementById('password').value.trim(); - // Validasi input kosong if (!username || !password) { showModal('error', 'Login Gagal!', 'Username dan password tidak boleh kosong.'); return; } - // Loading state const submitBtn = this.querySelector('button[type="submit"]'); - const originalText = submitBtn.textContent; - submitBtn.innerHTML = 'Memproses...'; submitBtn.disabled = true; try { const data = await loginRequest(username, password); + + console.log('Response dari server:', data); // Debug if (data.success) { - // Simpan data user ke localStorage localStorage.setItem('authToken', data.token); localStorage.setItem('username', data.username); - // Tampilkan modal sukses showModal('success', 'Login Berhasil!', `Selamat datang, ${data.username}!`); - } else { - // Handle error dari backend showModal('error', 'Login Gagal!', data.message || 'Username atau password salah.'); } } catch (error) { console.error('Login Error:', error); - // Handle berbagai jenis error let errorMessage = 'Terjadi kesalahan koneksi ke server.'; if (error.message === 'Failed to fetch') { errorMessage = 'Tidak dapat terhubung ke server. Periksa koneksi internet Anda.'; - } else if (error.message.includes('timeout')) { - errorMessage = 'Request timeout. Server tidak merespons.'; - } else if (error.response) { - // Error dari server dengan response - errorMessage = error.response.data?.message || 'Terjadi kesalahan pada server.'; - } else if (error.status === 401) { - errorMessage = 'Username atau password salah.'; - } else if (error.status === 403) { - errorMessage = 'Akun Anda diblokir. Hubungi administrator.'; - } else if (error.status === 500) { - errorMessage = 'Terjadi kesalahan pada server. Coba lagi nanti.'; } showModal('error', 'Error!', errorMessage); } finally { - // Kembalikan button ke state normal - submitBtn.textContent = originalText; submitBtn.disabled = false; } }); -// Link register -document.getElementById('registerLink').addEventListener('click', function(e) { - e.preventDefault(); - showModal('error', 'Info', 'Halaman Register sedang dalam pengembangan.'); -}); - -// Clear error visual saat user mulai mengetik document.getElementById('username').addEventListener('input', function() { this.style.borderColor = ''; }); document.getElementById('password').addEventListener('input', function() { this.style.borderColor = ''; -}); - -// Optional: Tambahkan visual error pada input -function setInputError(inputId) { - const input = document.getElementById(inputId); - if (input) { - input.style.borderColor = '#ff0080'; - input.style.boxShadow = '0 0 20px rgba(255, 0, 128, 0.3)'; - } -} - -// Optional: Check apakah user sudah login saat buka halaman -window.addEventListener('DOMContentLoaded', function() { - const token = localStorage.getItem('authToken'); - const username = localStorage.getItem('username'); - - // Jika sudah ada token, redirect ke homepage - if (token && username) { - // Optional: Validasi token dulu ke backend - console.log('User sudah login:', username); - // window.location.href = 'homepage.html'; // Uncomment untuk auto redirect - } }); \ No newline at end of file diff --git a/Login.php b/Login.php index 389c18e..b206227 100644 --- a/Login.php +++ b/Login.php @@ -1,13 +1,27 @@ "error", "message" => "Username dan password wajib diisi"]); + echo json_encode(["success" => false, "message" => "Username dan password wajib diisi"]); exit; } @@ -17,7 +31,7 @@ $stmt->execute(); $stmt->store_result(); if ($stmt->num_rows === 0) { - echo json_encode(["status" => "error", "message" => "Username tidak ditemukan"]); + echo json_encode(["success" => false, "message" => "Username tidak ditemukan"]); $stmt->close(); $conn->close(); exit; @@ -28,9 +42,14 @@ $stmt->fetch(); if (password_verify($password, $hashedPassword)) { $_SESSION['username'] = $username; - echo json_encode(["status" => "success", "message" => "Login berhasil"]); + echo json_encode([ + "success" => true, + "message" => "Login berhasil", + "username" => $username, + "token" => bin2hex(random_bytes(32)) + ]); } else { - echo json_encode(["status" => "error", "message" => "Password salah"]); + echo json_encode(["success" => false, "message" => "Password salah"]); } $stmt->close(); diff --git a/API Login.js b/Login_Request.js similarity index 100% rename from API Login.js rename to Login_Request.js diff --git a/Modal Login.js b/Modal_Login.js similarity index 93% rename from Modal Login.js rename to Modal_Login.js index b133453..2077297 100644 --- a/Modal Login.js +++ b/Modal_Login.js @@ -28,7 +28,7 @@ export function setupModalOk() { const modalIcon = document.getElementById('modalIcon'); if (modalIcon.classList.contains('success')) { - window.location.href = 'homepage.html'; + window.location.href = 'Homepage.html'; } else { closeModal(); } @@ -41,7 +41,7 @@ export function setupOutsideClose() { if (e.target === this) { if (modalIcon.classList.contains('success')) { - window.location.href = 'homepage.html'; + window.location.href = 'Homepage.html'; } else { closeModal(); } diff --git a/Modal Register.js b/Modal_Register.js similarity index 100% rename from Modal Register.js rename to Modal_Register.js diff --git a/Register.js b/Register.js index c49cb56..c5c9b58 100644 --- a/Register.js +++ b/Register.js @@ -1,5 +1,5 @@ -import { showModal, closeModal, setupModalOk, setupOutsideClose } from "./Modal Register.js"; -import { registerRequest } from "./API Register.js"; +import { showModal, closeModal, setupModalOk, setupOutsideClose } from "./Modal_Register.js"; +import { registerRequest } from "./Register_Request.js"; // Aktifkan tombol modal setupModalOk(); diff --git a/API Register.js b/Register_Request.js similarity index 100% rename from API Register.js rename to Register_Request.js