Reviewnacharbeitung
This commit is contained in:
@@ -4,15 +4,44 @@ require_once "php/model/LocalUserDAO.php";
|
||||
require_once 'php/model/Article.php';
|
||||
require_once 'php/model/ArticleManager.php';
|
||||
|
||||
$error = null;
|
||||
|
||||
if (!isset($_SESSION["user"])) {
|
||||
header("Location: index.php?pfad=login");
|
||||
exit();
|
||||
}
|
||||
|
||||
$dao = new LocalUserDAO();
|
||||
$error = null;
|
||||
/*
|
||||
* Prüft Vor- und Nachnamen.
|
||||
* Erlaubt sind Buchstaben, Umlaute, Leerzeichen und Bindestriche.
|
||||
*/
|
||||
function isValidName($name): bool {
|
||||
return preg_match("/^[a-zA-ZäöüÄÖÜß -]{2,50}$/", $name);
|
||||
}
|
||||
|
||||
/*
|
||||
* Prüft, ob die E-Mail-Adresse ein gültiges Format hat.
|
||||
*/
|
||||
function isValidEmailAddress($email): bool {
|
||||
return filter_var($email, FILTER_VALIDATE_EMAIL) !== false
|
||||
&& strlen($email) <= 100;
|
||||
}
|
||||
|
||||
/*
|
||||
* Prüft das neue Passwort.
|
||||
* Leeres Passwort ist erlaubt, wenn der Nutzer es nicht ändern möchte.
|
||||
*/
|
||||
function isValidProfilePassword($password): bool {
|
||||
if ($password === "") {
|
||||
return true;
|
||||
}
|
||||
|
||||
return strlen($password) >= 8 && strlen($password) <= 72;
|
||||
}
|
||||
|
||||
try {
|
||||
$dao = new LocalUserDAO();
|
||||
|
||||
$user = $dao->findUser($_SESSION["user_email"] ?? "");
|
||||
|
||||
if (!$user) {
|
||||
@@ -25,32 +54,43 @@ try {
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] === "POST" && isset($_POST["saveProfile"])) {
|
||||
$oldEmail = $_SESSION["user_email"];
|
||||
$newEmail = $_POST["email"] ?? "";
|
||||
$vorname = $_POST["vorname"] ?? "";
|
||||
$nachname = $_POST["nachname"] ?? "";
|
||||
|
||||
$newEmail = trim($_POST["email"] ?? "");
|
||||
$vorname = trim($_POST["vorname"] ?? "");
|
||||
$nachname = trim($_POST["nachname"] ?? "");
|
||||
$password = $_POST["password"] ?? "";
|
||||
|
||||
$existingUser = $dao->findUser($newEmail);
|
||||
|
||||
if ($existingUser && $newEmail !== $oldEmail) {
|
||||
$error = "Diese E-Mail-Adresse wird bereits verwendet.";
|
||||
if (!isValidName($vorname)) {
|
||||
$error = "Der Vorname darf nur Buchstaben, Leerzeichen und Bindestriche enthalten und muss 2 bis 50 Zeichen lang sein.";
|
||||
} elseif (!isValidName($nachname)) {
|
||||
$error = "Der Nachname darf nur Buchstaben, Leerzeichen und Bindestriche enthalten und muss 2 bis 50 Zeichen lang sein.";
|
||||
} elseif (!isValidEmailAddress($newEmail)) {
|
||||
$error = "Bitte gib eine gültige E-Mail-Adresse ein.";
|
||||
} elseif (!isValidProfilePassword($password)) {
|
||||
$error = "Das Passwort muss mindestens 8 Zeichen lang sein.";
|
||||
} else {
|
||||
$updated = $dao->updateUser(
|
||||
$oldEmail,
|
||||
$newEmail,
|
||||
$vorname,
|
||||
$nachname,
|
||||
$password
|
||||
);
|
||||
$existingUser = $dao->findUser($newEmail);
|
||||
|
||||
if ($updated) {
|
||||
$_SESSION["user"] = $vorname . " " . $nachname;
|
||||
$_SESSION["user_email"] = $newEmail;
|
||||
|
||||
header("Location: index.php?pfad=profile");
|
||||
exit();
|
||||
if ($existingUser && $newEmail !== $oldEmail) {
|
||||
$error = "Diese E-Mail-Adresse wird bereits verwendet.";
|
||||
} else {
|
||||
$error = "Die Daten konnten nicht gespeichert werden.";
|
||||
$updated = $dao->updateUser(
|
||||
$oldEmail,
|
||||
$newEmail,
|
||||
$vorname,
|
||||
$nachname,
|
||||
$password
|
||||
);
|
||||
|
||||
if ($updated) {
|
||||
$_SESSION["user"] = $vorname . " " . $nachname;
|
||||
$_SESSION["user_email"] = $newEmail;
|
||||
|
||||
header("Location: index.php?pfad=profile");
|
||||
exit();
|
||||
} else {
|
||||
$error = "Die Daten konnten nicht gespeichert werden.";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,5 +106,4 @@ try {
|
||||
|
||||
} catch (Exception $e) {
|
||||
$_SESSION["message"] = "internal_error";
|
||||
exit();
|
||||
}
|
||||
@@ -12,23 +12,58 @@ class LocalUserDAO implements UserDAOInterface {
|
||||
}
|
||||
|
||||
$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) {
|
||||
file_put_contents(
|
||||
$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 ($user["email"] === $email) {
|
||||
if (isset($user["email"]) && $user["email"] === $email) {
|
||||
|
||||
if (!isset($user["vorname"]) && isset($user["username"])) {
|
||||
$nameParts = explode(" ", $user["username"], 2);
|
||||
@@ -44,8 +79,19 @@ class LocalUserDAO implements UserDAOInterface {
|
||||
}
|
||||
|
||||
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,
|
||||
@@ -57,10 +103,25 @@ class LocalUserDAO implements UserDAOInterface {
|
||||
}
|
||||
|
||||
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 ($user["email"] === $oldEmail) {
|
||||
if (isset($user["email"]) && $user["email"] === $oldEmail) {
|
||||
$users[$i]["email"] = $newEmail;
|
||||
$users[$i]["vorname"] = $vorname;
|
||||
$users[$i]["nachname"] = $nachname;
|
||||
@@ -80,10 +141,12 @@ class LocalUserDAO implements UserDAOInterface {
|
||||
}
|
||||
|
||||
public function deleteUser($email) {
|
||||
$this->validateEmail($email);
|
||||
|
||||
$users = $this->loadUsers();
|
||||
|
||||
foreach ($users as $i => $user) {
|
||||
if ($user["email"] === $email) {
|
||||
if (isset($user["email"]) && $user["email"] === $email) {
|
||||
unset($users[$i]);
|
||||
$users = array_values($users);
|
||||
$this->saveUsers($users);
|
||||
|
||||
@@ -11,39 +11,85 @@ interface UserDAOInterface {
|
||||
/**
|
||||
* Sucht einen Benutzer anhand seiner E-Mail-Adresse.
|
||||
*
|
||||
* Funktion:
|
||||
* Liefert die gespeicherten Benutzerdaten zu einer E-Mail-Adresse.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $email E-Mail-Adresse des gesuchten Benutzers
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return array|null Benutzerdaten als Array oder null
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen werden können
|
||||
*/
|
||||
public function findUser($email);
|
||||
|
||||
/**
|
||||
* Fügt einen neuen Benutzer hinzu.
|
||||
*
|
||||
* Funktion:
|
||||
* Erstellt einen neuen Benutzereintrag und speichert ihn
|
||||
* in der jeweiligen Datenquelle.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $email E-Mail-Adresse des Benutzers
|
||||
* @param string $vorname Vorname des Benutzers
|
||||
* @param string $nachname Nachname des Benutzers
|
||||
* @param string $password Passwort des Benutzers
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return void
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind
|
||||
* oder die E-Mail-Adresse bereits verwendet wird
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gespeichert werden können
|
||||
*/
|
||||
public function addUser($email, $vorname, $nachname, $password);
|
||||
|
||||
/**
|
||||
* Aktualisiert einen bestehenden Benutzer.
|
||||
*
|
||||
* Funktion:
|
||||
* Ändert die E-Mail-Adresse, den Vornamen, den Nachnamen
|
||||
* und optional das Passwort eines bestehenden Benutzers.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $oldEmail Alte E-Mail-Adresse
|
||||
* @param string $newEmail Neue E-Mail-Adresse
|
||||
* @param string $vorname Neuer Vorname
|
||||
* @param string $nachname Neuer Nachname
|
||||
* @param string|null $password Neues Passwort oder null
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return bool true, wenn der Benutzer aktualisiert wurde, sonst false
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn Eingabedaten ungültig sind
|
||||
* oder die neue E-Mail-Adresse bereits verwendet wird
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
|
||||
* oder gespeichert werden können
|
||||
*/
|
||||
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null);
|
||||
|
||||
/**
|
||||
* Löscht einen Benutzer anhand seiner E-Mail-Adresse.
|
||||
*
|
||||
* Funktion:
|
||||
* Entfernt einen vorhandenen Benutzer aus der Datenquelle.
|
||||
*
|
||||
* Eingabe:
|
||||
* @param string $email E-Mail-Adresse des zu löschenden Benutzers
|
||||
*
|
||||
* Ausgabe:
|
||||
* @return bool true, wenn der Benutzer gelöscht wurde, sonst false
|
||||
*
|
||||
* Mögliche Fehler:
|
||||
* @throws InvalidArgumentException wenn die E-Mail-Adresse ungültig ist
|
||||
* @throws RuntimeException wenn die Benutzerdaten nicht gelesen
|
||||
* oder gespeichert werden können
|
||||
*/
|
||||
public function deleteUser($email);
|
||||
}
|
||||
Reference in New Issue
Block a user