diff --git a/content/deleteAccount.php b/content/deleteAccount.php deleted file mode 100644 index 6f02a18..0000000 --- a/content/deleteAccount.php +++ /dev/null @@ -1,20 +0,0 @@ -deleteUser($_SESSION["user_email"]); -} - -$_SESSION = []; -session_destroy(); - -header("Location: index.php"); -exit(); \ No newline at end of file diff --git a/index.php b/index.php index cd4ea48..d02673d 100644 --- a/index.php +++ b/index.php @@ -17,12 +17,12 @@ if ($pfad === "register") { } if ($pfad === "logout") { - include_once "content/logout.php"; + include_once "content/logout-controller.php"; exit(); } if ($pfad === "deleteAccount") { - include_once "content/deleteAccount.php"; + include_once "content/deleteAccount-controller.php"; exit(); } ?> diff --git a/php/controller/deleteAccount-controller.php b/php/controller/deleteAccount-controller.php new file mode 100644 index 0000000..8d42198 --- /dev/null +++ b/php/controller/deleteAccount-controller.php @@ -0,0 +1,30 @@ +deleteUser($_SESSION["user_email"]); + } + + $_SESSION = []; + session_destroy(); + + header("Location: index.php"); + exit(); + +} catch (Exception $e) { + + $_SESSION["message"] = "internal_error"; + + header("Location: index.php?pfad=profile"); + exit(); +} \ No newline at end of file diff --git a/php/controller/login-controller.php b/php/controller/login-controller.php index c034dcb..28090cf 100644 --- a/php/controller/login-controller.php +++ b/php/controller/login-controller.php @@ -2,7 +2,6 @@ require_once "php/model/UserManager.php"; -$dao = UserManager::getInstance(); $error = null; /* @@ -11,20 +10,28 @@ $error = null; */ if ($_SERVER["REQUEST_METHOD"] === "POST") { - $email = $_POST["email"] ?? ""; - $password = $_POST["password"] ?? ""; + try { - $user = $dao->findUser($email); + $dao = UserManager::getInstance(); - if ($user && password_verify($password, $user["password"])) { + $email = $_POST["email"] ?? ""; + $password = $_POST["password"] ?? ""; - $_SESSION["user"] = $user["vorname"] . " " . $user["nachname"]; - $_SESSION["user_email"] = $user["email"]; + $user = $dao->findUser($email); - header("Location: index.php"); - exit(); + if ($user && password_verify($password, $user["password"])) { - } else { - $error = "Login fehlgeschlagen. Bitte überprüfe deine Eingaben."; + $_SESSION["user"] = $user["vorname"] . " " . $user["nachname"]; + $_SESSION["user_email"] = $user["email"]; + + header("Location: index.php"); + exit(); + + } else { + $error = "Login fehlgeschlagen. Bitte überprüfe deine Eingaben."; + } + + } catch (Exception $e) { + $error = "Es ist ein interner Fehler aufgetreten. Bitte versuche es erneut."; } } \ No newline at end of file diff --git a/content/logout.php b/php/controller/logout-controller.php similarity index 100% rename from content/logout.php rename to php/controller/logout-controller.php diff --git a/php/model/DatabaseUserManager.php b/php/model/DatabaseUserManager.php index a985160..4e04ae5 100644 --- a/php/model/DatabaseUserManager.php +++ b/php/model/DatabaseUserManager.php @@ -2,10 +2,24 @@ require_once "UserManagerDAO.php"; +/** + * Klasse für den Zugriff auf Benutzerdaten über eine SQLite-Datenbank. + * + * Diese Klasse verwendet PDO, Prepared Statements und speichert + * Benutzerdaten in der Datei db/users.db. + */ class DatabaseUserManager implements UserManagerDAO { private static $instance = null; + /** + * Konstruktor. + * + * Erstellt die Benutzerdatenbank und die Tabelle users, + * falls diese noch nicht existieren. + * + * @throws RuntimeException wenn die Datenbank nicht erstellt werden kann + */ public function __construct() { try { @@ -27,6 +41,13 @@ class DatabaseUserManager implements UserManagerDAO { } } + /** + * Baut eine Verbindung zur SQLite-Datenbank auf. + * + * @return PDO Datenbankverbindung + * + * @throws RuntimeException wenn keine Verbindung hergestellt werden kann + */ private function getConnection() { try { @@ -42,6 +63,11 @@ class DatabaseUserManager implements UserManagerDAO { } } + /** + * Gibt die Singleton-Instanz des DatabaseUserManagers zurück. + * + * @return DatabaseUserManager Instanz des DatabaseUserManagers + */ public static function getInstance() { if (self::$instance == null) { @@ -51,6 +77,16 @@ class DatabaseUserManager implements UserManagerDAO { return self::$instance; } + /** + * Sucht einen Benutzer anhand seiner E-Mail-Adresse. + * + * @param string $email E-Mail-Adresse des Benutzers + * + * @return array|null Benutzerdaten als Array oder null, + * wenn kein Benutzer gefunden wurde + * + * @throws RuntimeException wenn der Benutzer nicht geladen werden kann + */ public function findUser($email) { try { @@ -72,6 +108,22 @@ class DatabaseUserManager implements UserManagerDAO { } } + /** + * Fügt einen neuen Benutzer in die Datenbank ein. + * + * Die Speicherung erfolgt innerhalb einer Transaktion. + * Doppelte E-Mail-Adressen werden durch den Primary Key verhindert. + * + * @param string $email E-Mail-Adresse des Benutzers + * @param string $vorname Vorname des Benutzers + * @param string $nachname Nachname des Benutzers + * @param string $password Passwort-Hash des Benutzers + * + * @return void + * + * @throws InvalidArgumentException wenn die E-Mail-Adresse bereits verwendet wird + * @throws RuntimeException wenn der Benutzer nicht gespeichert werden kann + */ public function addUser($email, $vorname, $nachname, $password) { try { @@ -107,6 +159,24 @@ class DatabaseUserManager implements UserManagerDAO { } } + /** + * Aktualisiert die Daten eines bestehenden Benutzers. + * + * Optional kann zusätzlich das Passwort geändert werden. + * Wenn kein neues Passwort übergeben wird, bleibt das alte Passwort erhalten. + * + * @param string $oldEmail Aktuelle E-Mail-Adresse des Benutzers + * @param string $newEmail Neue E-Mail-Adresse des Benutzers + * @param string $vorname Neuer Vorname des Benutzers + * @param string $nachname Neuer Nachname des Benutzers + * @param string|null $password Neues Passwort oder null + * + * @return bool true, wenn der Benutzer aktualisiert wurde, + * sonst false + * + * @throws InvalidArgumentException wenn die neue E-Mail-Adresse bereits verwendet wird + * @throws RuntimeException wenn der Benutzer nicht aktualisiert werden kann + */ public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null) { try { @@ -160,6 +230,16 @@ class DatabaseUserManager implements UserManagerDAO { } } + /** + * Löscht einen Benutzer anhand seiner E-Mail-Adresse. + * + * @param string $email E-Mail-Adresse des zu löschenden Benutzers + * + * @return bool true, wenn der Benutzer gelöscht wurde, + * sonst false + * + * @throws RuntimeException wenn der Benutzer nicht gelöscht werden kann + */ public function deleteUser($email) { try { diff --git a/php/validator/user-validator.php b/php/validator/user-validator.php index 0f3bc40..0f789cf 100644 --- a/php/validator/user-validator.php +++ b/php/validator/user-validator.php @@ -1,5 +1,15 @@ = 5 && $zeichenAnzahl <= 12; } +/** + * Prüft ein optionales Passwort. + * + * Ein leeres Passwort ist erlaubt und bedeutet, + * dass das bestehende Passwort unverändert bleibt. + * Falls ein Passwort angegeben wurde, wird es + * mit den normalen Passwortregeln geprüft. + * + * @param string|null $password Zu prüfendes Passwort + * + * @return bool true wenn das Passwort gültig oder leer ist, + * sonst false + */ function userOptionalPasswordValidator($password) { if (!isset($password) || $password === '') {