Spaces:
Running
Running
File size: 1,634 Bytes
c6fe16a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
// Shared utility functions
const API_BASE_URL = 'http://localhost:3000/api';
async function fetchWithAuth(url, options = {}) {
const token = localStorage.getItem('token');
if (token) {
options.headers = {
...options.headers,
'Authorization': `Bearer ${token}`
};
}
const response = await fetch(`${API_BASE_URL}${url}`, options);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
}
function redirectTo(path) {
window.location.href = path;
}
function showToast(message, type = 'success') {
const toast = document.createElement('div');
toast.className = `fixed top-4 right-4 px-4 py-2 rounded-md shadow-lg text-white ${
type === 'success' ? 'bg-green-500' : 'bg-red-500'
}`;
toast.textContent = message;
document.body.appendChild(toast);
setTimeout(() => {
toast.classList.add('opacity-0', 'transition-opacity', 'duration-300');
setTimeout(() => toast.remove(), 300);
}, 3000);
}
// Auth state management
function checkAuth() {
const token = localStorage.getItem('token');
const user = localStorage.getItem('user');
if (token && user) {
const parsedUser = JSON.parse(user);
if (parsedUser.role === 'admin') {
redirectTo('/admin-dashboard.html');
} else {
redirectTo('/dashboard.html');
}
}
}
// Initialize auth check on pages that require it
if (document.body.classList.contains('auth-required')) {
document.addEventListener('DOMContentLoaded', checkAuth);
} |