/** * Service-Klasse für die Benutzerverwaltung (User Service). * Kapselt alle REST-Anfragen an das Backend bezüglich Login, Registrierung, * Abfrage aller Benutzer und Löschung von Konten. */ class UserService { /** * Erstellt eine Instanz des UserService. * @param {Object} config - Das globale Konfigurationsobjekt (enthält API_BASE_URL). */ constructor(config) { this.baseUrl = config.API_BASE_URL; this.urlTail = "user"; } /** * Authentifiziert einen Benutzer und ruft dessen Kontoinformationen ab. * @param {string} username - Der Benutzername. * @param {string} password - Das Passwort des Benutzers. * @returns {Promise} Ein Promise mit dem HTTP-Status, dem OK-Flag und den Benutzerdaten (Body). */ async getUser(username, password) { const response = await fetch(`${this.baseUrl}${this.urlTail}`, { method: "GET", headers: { // Authentifizierung erfolgt über benutzerdefinierte HTTP-Header "X-Username": username, "X-Password": password, }, }); let body = null; try { body = await response.json(); } catch { console.error("Error in getUser"); } return { status: response.status, ok: response.ok, body: body, }; } /** * Ruft eine Liste aller im System registrierten Benutzer ab (z. B. für die Challenge-Auswahl). * @param {string} username - Der Benutzername des anfragenden Benutzers. * @param {string} password - Das Passwort des anfragenden Benutzers. * @returns {Promise} Ein Promise mit der Benutzerliste im Response-Body. */ async getUsers(username, password) { const response = await fetch(`${this.baseUrl}users`, { method: "GET", headers: { "X-Username": username, "X-Password": password, }, }); let body = null; try { body = await response.json(); } catch { console.error("Error in getUsers"); } return { status: response.status, ok: response.ok, body: body, }; } /** * Löscht das eigene Benutzerkonto unwiderruflich aus dem System. * @param {string} username - Der Benutzername des zu löschenden Kontos. * @param {string} password - Das Passwort des Kontos. * @returns {Promise} Ein Promise mit dem Status der Löschoperation. */ async deleteUser(username, password) { const response = await fetch(`${this.baseUrl}${this.urlTail}`, { method: "DELETE", headers: { "X-Username": username, "X-Password": password, }, }); let body = null; try { body = await response.json(); } catch { console.error("Error in deleteUser"); } return { status: response.status, ok: response.ok, body: body, }; } /** * Registriert einen neuen Benutzer im System. Das Passwort wird vom Backend generiert und zurückgegeben. * @param {string} username - Der gewünschte neue Benutzername. * @returns {Promise} Ein Promise mit den erstellten Account-Daten (inkl. generiertem Passwort) im Body. */ async postUser(username) { const response = await fetch(`${this.baseUrl}${this.urlTail}`, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ username: username, }), }); let body = null; try { body = await response.json(); } catch { console.error("Error in postUser"); } return { status: response.status, ok: response.ok, body: body, }; } } // Global verfügbar machen window.UserService = UserService;