file)) { return []; } $json = file_get_contents($this->file); if ($json === false) { throw new RuntimeException("Benutzerdaten konnten nicht gelesen werden."); } $users = json_decode($json, true); if ($users === null && json_last_error() !== JSON_ERROR_NONE) { throw new RuntimeException("Benutzerdaten sind fehlerhaft."); } return is_array($users) ? $users : []; } private function saveUsers($users) { $result = file_put_contents( $this->file, json_encode($users, JSON_PRETTY_PRINT) ); if ($result === false) { throw new RuntimeException("Benutzerdaten konnten nicht gespeichert werden."); } } private function validateEmail($email) { if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { throw new InvalidArgumentException("Ungültige E-Mail-Adresse."); } } private function validateName($name, $fieldName) { if (!preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name)) { throw new InvalidArgumentException( $fieldName . " darf nur Buchstaben, Leerzeichen und Bindestriche enthalten." ); } } private function validatePassword($password) { if (empty($password)) { throw new InvalidArgumentException("Passwort darf nicht leer sein."); } } public function findUser($email) { $this->validateEmail($email); $users = $this->loadUsers(); foreach ($users as $user) { if (isset($user["email"]) && $user["email"] === $email) { if (!isset($user["vorname"]) && isset($user["username"])) { $nameParts = explode(" ", $user["username"], 2); $user["vorname"] = $nameParts[0] ?? ""; $user["nachname"] = $nameParts[1] ?? ""; } return $user; } } return null; } public function addUser($email, $vorname, $nachname, $password) { $this->validateEmail($email); $this->validateName($vorname, "Vorname"); $this->validateName($nachname, "Nachname"); $this->validatePassword($password); $users = $this->loadUsers(); foreach ($users as $user) { if (isset($user["email"]) && $user["email"] === $email) { throw new InvalidArgumentException("Diese E-Mail-Adresse wird bereits verwendet."); } } $users[] = [ "email" => $email, "vorname" => $vorname, "nachname" => $nachname, "password" => $password ]; $this->saveUsers($users); } public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) { $this->validateEmail($oldEmail); $this->validateEmail($newEmail); $this->validateName($vorname, "Vorname"); $this->validateName($nachname, "Nachname"); $users = $this->loadUsers(); foreach ($users as $user) { if ( isset($user["email"]) && $user["email"] === $newEmail && $newEmail !== $oldEmail ) { throw new InvalidArgumentException("Diese E-Mail-Adresse wird bereits verwendet."); } } foreach ($users as $i => $user) { if (isset($user["email"]) && $user["email"] === $oldEmail) { $users[$i]["email"] = $newEmail; $users[$i]["vorname"] = $vorname; $users[$i]["nachname"] = $nachname; unset($users[$i]["username"]); if (!empty($password)) { $users[$i]["password"] = password_hash($password, PASSWORD_DEFAULT); } $this->saveUsers($users); return true; } } return false; } public function deleteUser($email) { $this->validateEmail($email); $users = $this->loadUsers(); foreach ($users as $i => $user) { if (isset($user["email"]) && $user["email"] === $email) { unset($users[$i]); $users = array_values($users); $this->saveUsers($users); return true; } } return false; } }