58 lines
1.8 KiB
JavaScript
58 lines
1.8 KiB
JavaScript
// 🔐 Password hashing using jsSHA
|
|
function hashPassword(password) {
|
|
const shaObj = new jsSHA("SHA-256", "TEXT");
|
|
shaObj.update(password);
|
|
return shaObj.getHash("HEX");
|
|
}
|
|
|
|
// 🌐 Load users from server
|
|
let users = [];
|
|
|
|
// 🔓 Verify user login
|
|
async function verifyLogin() {
|
|
const uname = document.getElementById('username').value.trim();
|
|
const pw = document.getElementById('password').value;
|
|
const hash = hashPassword(pw);
|
|
const msg = document.getElementById('loginMessage');
|
|
|
|
try {
|
|
const res = await fetch('/verifyUser', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ username: uname, hash })
|
|
});
|
|
|
|
if (!res.ok) {
|
|
msg.textContent = "Invalid username or password.";
|
|
return;
|
|
}
|
|
|
|
const user = await res.json();
|
|
localStorage.setItem('loggedInUser', JSON.stringify(user));
|
|
msg.textContent = '';
|
|
setupSession(user);
|
|
} catch (err) {
|
|
console.error("Login error:", err);
|
|
msg.textContent = "Login failed. Please try again.";
|
|
}
|
|
}
|
|
|
|
// 🚪 Log out user
|
|
function logoutUser() {
|
|
localStorage.removeItem('loggedInUser');
|
|
|
|
document.getElementById('adminPanel').classList.add('hidden');
|
|
document.getElementById('studentPanel').classList.add('hidden');
|
|
document.getElementById('nav').classList.add('hidden');
|
|
document.getElementById('loginPanel').classList.remove('hidden');
|
|
document.getElementById('username').value = '';
|
|
document.getElementById('password').value = '';
|
|
|
|
const roleBanner = document.getElementById('roleBanner');
|
|
roleBanner.classList.add('hidden');
|
|
roleBanner.classList.remove('admin', 'student');
|
|
roleBanner.textContent = '';
|
|
|
|
const loginMessage = document.getElementById('loginMessage');
|
|
if (loginMessage) loginMessage.textContent = '';
|
|
} |