From e56169b2992e46410a613f6dfcdb0f6bdd369d2a Mon Sep 17 00:00:00 2001 From: GitProtogen Date: Thu, 5 Mar 2026 12:51:43 +0100 Subject: [PATCH] simplified sending responese --- .gitignore | 3 +- src/Database/Handler.php | 67 +++++++++++++++++++++++++++++++++ src/Http/LoginController.php | 5 +-- src/Http/RegisterController.php | 6 +-- src/Http/Utils.php | 13 +++++++ storage/.gitkeep | 0 storage/users.sqlite | 0 7 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 src/Database/Handler.php create mode 100644 src/Http/Utils.php create mode 100644 storage/.gitkeep create mode 100644 storage/users.sqlite diff --git a/.gitignore b/.gitignore index 3fb0e42..dd26e04 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ vendor composer.json -composer.lock \ No newline at end of file +composer.lock +storage/database.sqlite \ No newline at end of file diff --git a/src/Database/Handler.php b/src/Database/Handler.php new file mode 100644 index 0000000..d4166aa --- /dev/null +++ b/src/Database/Handler.php @@ -0,0 +1,67 @@ +pdo = new PDO('sqlite:' . __DIR__ . '/../../storage/database.sqlite'); + $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + } + + public function init(): void + { + $this->pdo->exec(" + CREATE TABLE IF NOT EXISTS users ( + username VARCHAR(32) NOT NULL UNIQUE, + password CHAR(255) NOT NULL + ) + "); + } + + public function addUser(string $username, string $password): void + { + $statement = $this->pdo->prepare("INSERT INTO users (username, password) VALUES (:username, :password)"); + $statement->execute([ + "username" => $username, + "password" => password_hash($password, PASSWORD_ARGON2ID) + ]); + } + public function deleteUser(string $username): void + { + $statement = $this->pdo->prepare("DELETE FROM users WHERE username = :username"); + $statement->execute([ + "username" => $username + ]); + } + public function userExists(string $username): bool + { + $statement = $this->pdo->prepare("SELECT * FROM users WHERE username = :username"); + $statement->execute([ + $username + ]); + return $statement->rowCount() > 0; + } + public function changeUsername(string $username, string $newUsername): void + { + $statement = $this->pdo->prepare("UPDATE users SET username = :newUsername WHERE username = :username"); + $statement->execute([ + "username" => $username, + "newUsername" => $newUsername + ]); + } + public function changePassword(string $username, string $newPassword): void + { + $statement = $this->pdo->prepare("UPDATE users SET password = :newPassword WHERE username = :username"); + $statement->execute([ + "username" => $username, + "newPassword" => $newPassword + ]); + } +} \ No newline at end of file diff --git a/src/Http/LoginController.php b/src/Http/LoginController.php index 2dba7e5..08a7ddc 100644 --- a/src/Http/LoginController.php +++ b/src/Http/LoginController.php @@ -11,7 +11,6 @@ class LoginController implements HttpServerInterface public function onOpen(ConnectionInterface $conn, RequestInterface $request = null): void { $params = []; - $json = ""; parse_str($request->getUri()->getQuery(), $params); $username = $params["username"]; @@ -19,13 +18,13 @@ class LoginController implements HttpServerInterface if (!$username || !$password) { $json = json_encode(["error" => "Bad Credentials"]); - $conn->send("HTTP/1.1 400 Bad Request\r\nContent-Type: application/json\r\n\r\n{$json}"); + Utils::class->sendJson($conn, "404 Bad Request", $json); $conn->close(); return; } $json = json_encode(["token" => "token"]); - $conn->send("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{$json}"); + Utils::class->sendJson($conn, "200 OK", $json); $conn->close(); } diff --git a/src/Http/RegisterController.php b/src/Http/RegisterController.php index d5b8d3e..4f3926d 100644 --- a/src/Http/RegisterController.php +++ b/src/Http/RegisterController.php @@ -5,13 +5,13 @@ namespace ComCen\Http; use Ratchet\ConnectionInterface; use Ratchet\Http\HttpServerInterface; use Psr\Http\Message\RequestInterface; +use ComCen\Database\Handler; class RegisterController implements HttpServerInterface { public function onOpen(ConnectionInterface $conn, RequestInterface $request = null): void { $params = []; - $json = ""; parse_str($request->getUri()->getQuery(), $params); $username = $params["username"]; @@ -19,13 +19,13 @@ class RegisterController implements HttpServerInterface if (!$username || !$password) { $json = json_encode(["error" => "Bad Credentials"]); - $conn->send("HTTP/1.1 400 Bad Request\r\nContent-Type: application/json\r\n\r\n{$json}"); + Utils::class->sendJson($conn, "404 Bad Request", $json); $conn->close(); return; } $json = json_encode(["token" => "token"]); - $conn->send("HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{$json}"); + Utils::class->sendJson($conn, "200 OK", $json); $conn->close(); } diff --git a/src/Http/Utils.php b/src/Http/Utils.php new file mode 100644 index 0000000..aee932f --- /dev/null +++ b/src/Http/Utils.php @@ -0,0 +1,13 @@ +send("HTTP/1.1 {$head}\r\nContent-Type: application/json\r\n\r\n{$jsonData}"); + } +} \ No newline at end of file diff --git a/storage/.gitkeep b/storage/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/storage/users.sqlite b/storage/users.sqlite new file mode 100644 index 0000000..e69de29