Files
blackroad-metaverse/auth.js
Your Name a40f2b2742 🔐 Login system
2026-01-30 16:29:07 -06:00

117 lines
3.1 KiB
JavaScript

// ===== BLACKROAD AUTHENTICATION SYSTEM =====
// Handles login, session management, and authentication checks
class BlackRoadAuth {
constructor() {
this.storageKey = 'blackroad_user';
this.sessionTimeout = 30 * 24 * 60 * 60 * 1000; // 30 days
}
// Check if user is logged in
isLoggedIn() {
const localUser = localStorage.getItem(this.storageKey);
const sessionUser = sessionStorage.getItem(this.storageKey);
if (localUser || sessionUser) {
const userData = JSON.parse(localUser || sessionUser);
const timeSinceLogin = Date.now() - userData.timestamp;
// Check if session is still valid
if (userData.remember && timeSinceLogin < this.sessionTimeout) {
return userData;
} else if (!userData.remember) {
return userData;
} else {
// Session expired
this.logout();
return false;
}
}
return false;
}
// Get current user data
getCurrentUser() {
return this.isLoggedIn();
}
// Login user
login(username, password, remember = false) {
const userData = {
username: username,
loggedIn: true,
timestamp: Date.now(),
remember: remember
};
if (remember) {
localStorage.setItem(this.storageKey, JSON.stringify(userData));
} else {
sessionStorage.setItem(this.storageKey, JSON.stringify(userData));
}
return true;
}
// Guest login
loginAsGuest() {
const userData = {
username: 'Guest',
loggedIn: true,
guest: true,
timestamp: Date.now()
};
sessionStorage.setItem(this.storageKey, JSON.stringify(userData));
return true;
}
// Logout user
logout() {
localStorage.removeItem(this.storageKey);
sessionStorage.removeItem(this.storageKey);
}
// Require authentication (redirect to login if not logged in)
requireAuth(redirectUrl = 'login.html') {
if (!this.isLoggedIn()) {
window.location.href = redirectUrl;
return false;
}
return true;
}
// Display welcome message
showWelcome() {
const user = this.getCurrentUser();
if (user) {
console.log(`👋 Welcome, ${user.username}!`);
return `Welcome, ${user.username}!`;
}
return null;
}
// Get user display name
getUsername() {
const user = this.getCurrentUser();
return user ? user.username : 'Guest';
}
// Check if user is guest
isGuest() {
const user = this.getCurrentUser();
return user && user.guest === true;
}
}
// Create global auth instance
const blackRoadAuth = new BlackRoadAuth();
// Auto-check authentication on page load (optional, can be disabled)
if (typeof AUTH_REQUIRED !== 'undefined' && AUTH_REQUIRED === true) {
document.addEventListener('DOMContentLoaded', () => {
blackRoadAuth.requireAuth();
});
}