mirror of
https://github.com/ceratic/project_vollidioten_website.git
synced 2026-05-14 00:16:47 +02:00
- Added world map page with interactive marker display - Implemented admin map management for marker CRUD operations - Added map layers and markers seed data to database - Integrated new routes for map functionality - Updated database configuration for production environment - Added documentation page route - Enhanced package.json with required dependencies for map features
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { DiscordUser } from '../types';
|
|
|
|
// Points to the production backend via Traefik
|
|
const API_URL = 'https://vollidioten.ceraticsoft.de';
|
|
|
|
class AuthService {
|
|
private user: DiscordUser | null = null;
|
|
private listeners: ((user: DiscordUser | null) => void)[] = [];
|
|
|
|
constructor() {
|
|
this.checkSession();
|
|
}
|
|
|
|
getUser(): DiscordUser | null {
|
|
return this.user;
|
|
}
|
|
|
|
// Check if session cookie exists and is valid
|
|
async checkSession() {
|
|
try {
|
|
const res = await fetch(`${API_URL}/auth/me`, { credentials: 'include' });
|
|
if (res.ok) {
|
|
const data = await res.json();
|
|
// Ensure isAdmin property exists
|
|
this.user = {
|
|
...data,
|
|
isAdmin: data.isAdmin || false
|
|
};
|
|
this.notifyListeners();
|
|
}
|
|
} catch (e) {
|
|
console.log("Auth check failed (Backend might be offline)", e);
|
|
}
|
|
}
|
|
|
|
// Redirects to Discord OAuth
|
|
async login(rememberMe: boolean = false): Promise<void> {
|
|
const rememberParam = rememberMe ? '?remember_me=true' : '';
|
|
window.location.href = `${API_URL}/auth/discord${rememberParam}`;
|
|
}
|
|
|
|
logout() {
|
|
window.location.href = `${API_URL}/auth/logout`;
|
|
}
|
|
|
|
subscribe(listener: (user: DiscordUser | null) => void) {
|
|
this.listeners.push(listener);
|
|
listener(this.user);
|
|
return () => {
|
|
this.listeners = this.listeners.filter(l => l !== listener);
|
|
};
|
|
}
|
|
|
|
private notifyListeners() {
|
|
this.listeners.forEach(l => l(this.user));
|
|
}
|
|
}
|
|
|
|
export const authService = new AuthService();
|