129 lines
4.8 KiB
JavaScript

// Authentication related functions
import { showStatus } from './utils.js';
export let currentUser = null;
export async function checkAuth() {
try {
const response = await fetch('/api/auth/check');
const data = await response.json();
if (!data.authenticated) {
window.location.href = '/login.html';
throw new Error('Not authenticated');
}
currentUser = data.user;
updateUserInterface();
} catch (error) {
console.error('Auth check failed:', error);
window.location.href = '/login.html';
throw error;
}
}
export function updateUserInterface() {
if (!currentUser) return;
// Update user email in both desktop and mobile
const userEmailElement = document.getElementById('user-email');
const mobileUserEmailElement = document.getElementById('mobile-user-email');
if (userEmailElement) {
userEmailElement.textContent = currentUser.email;
}
if (mobileUserEmailElement) {
mobileUserEmailElement.textContent = currentUser.email;
}
// Control visibility of homepage link for admins
const homepageLink = document.getElementById('homepage-link');
if (homepageLink) {
if (currentUser.isAdmin) {
homepageLink.style.display = 'inline-flex';
} else {
homepageLink.style.display = 'none';
}
}
// Add admin link if user is admin
if (currentUser.isAdmin) {
addAdminLinks();
}
}
function addAdminLinks() {
// Add admin link to desktop header
const headerActions = document.querySelector('.header-actions');
if (headerActions) {
const adminLink = document.createElement('a');
adminLink.href = '/admin.html';
adminLink.className = 'btn btn-secondary';
adminLink.textContent = '⚙️ Admin';
headerActions.insertBefore(adminLink, headerActions.firstChild);
}
// Add admin link to mobile dropdown
const mobileDropdownContent = document.getElementById('mobile-dropdown-content');
if (mobileDropdownContent) {
// Check if admin link already exists
if (!mobileDropdownContent.querySelector('.admin-link-mobile')) {
const adminItem = document.createElement('div');
adminItem.className = 'mobile-dropdown-item admin-link-mobile';
const adminLink = document.createElement('a');
adminLink.href = '/admin.html';
adminLink.style.color = 'inherit';
adminLink.style.textDecoration = 'none';
adminLink.textContent = '⚙️ Admin Panel';
adminItem.appendChild(adminLink);
// Insert admin link at the top of the dropdown
if (mobileDropdownContent.firstChild) {
mobileDropdownContent.insertBefore(adminItem, mobileDropdownContent.firstChild);
} else {
mobileDropdownContent.appendChild(adminItem);
}
}
// Add homepage link for mobile dropdown if it doesn't exist
if (!mobileDropdownContent.querySelector('.homepage-link-mobile')) {
const homepageItem = document.createElement('div');
homepageItem.className = 'mobile-dropdown-item homepage-link-mobile';
const homepageLink = document.createElement('a');
homepageLink.href = '#'; // Or the correct link for homepage
homepageLink.id = 'mobile-homepage-link';
homepageLink.style.color = 'inherit';
homepageLink.style.textDecoration = 'none';
homepageLink.textContent = '🖥️ Homepage';
homepageItem.appendChild(homepageLink);
// Insert after the admin link
const adminLink = mobileDropdownContent.querySelector('.admin-link-mobile');
if (adminLink && adminLink.nextSibling) {
mobileDropdownContent.insertBefore(homepageItem, adminLink.nextSibling);
} else if (adminLink) {
mobileDropdownContent.appendChild(homepageItem);
} else if (mobileDropdownContent.firstChild) {
mobileDropdownContent.insertBefore(homepageItem, mobileDropdownContent.firstChild);
} else {
mobileDropdownContent.appendChild(homepageItem);
}
// Add event listener for mobile homepage link
const mobileHomepageLink = document.getElementById('mobile-homepage-link');
const desktopHomepageLink = document.getElementById('homepage-link');
if (mobileHomepageLink && desktopHomepageLink) {
mobileHomepageLink.addEventListener('click', (e) => {
e.preventDefault();
desktopHomepageLink.click();
});
}
}
}
}