mirror of
https://github.com/ceratic/project_vollidioten_website.git
synced 2026-05-14 00:16:47 +02:00
feat: Add DatabaseManager and LinkPlayer components, implement authentication and linking logic
- Created DatabaseManager component for managing database access via phpMyAdmin. - Developed LinkPlayer component to link Discord accounts with game characters, including user authentication and error handling. - Added mock data files for players, organizations, and projects to handle backend unavailability. - Implemented AuthService for managing user authentication and session checks. - Created DatabaseService to fetch and manage player, organization, and project data with fallback to mock data. - Added HTML page for handling authentication unavailability. - Developed a test script for validating Docker setup and required files.
This commit is contained in:
54
services/AuthService.ts
Normal file
54
services/AuthService.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
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();
|
||||
this.user = data;
|
||||
this.notifyListeners();
|
||||
}
|
||||
} catch (e) {
|
||||
console.log("Auth check failed (Backend might be offline)", e);
|
||||
}
|
||||
}
|
||||
|
||||
// Redirects to Discord OAuth
|
||||
async login(): Promise<void> {
|
||||
window.location.href = `${API_URL}/auth/discord`;
|
||||
}
|
||||
|
||||
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();
|
||||
Reference in New Issue
Block a user