From 6c48baac3db56aeb95a1b3c3530c7eec4295029f Mon Sep 17 00:00:00 2001 From: Peter Hoppe Date: Sat, 17 Dec 2022 01:18:54 +0100 Subject: [PATCH] =?UTF-8?q?l=C3=A4uft=20schon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dog.sql | 26 ++--- package-lock.json | 29 ++++++ package.json | 1 + php/php-dog/AuthMiddleware.php | 2 +- php/php-dog/classes/Database.php | 3 +- php/php-dog/classes/lib.php | 22 ++-- php/php-dog/getDog.php | 4 +- php/php-dog/login.php | 153 +++++++++++++++------------- php/php-dog/register.php | 111 ++++++++++++-------- php/php-dog/upload.php | 2 +- public/index.html | 1 - public/manifest.json | 12 +-- src/App.tsx | 17 ++-- src/components/Login.tsx | 64 ++++++++++-- src/components/Register.tsx | 65 ++++++++++-- src/context/UserContext.tsx | 170 +++++++++++++++++++++++++++++++ src/index.tsx | 6 +- 17 files changed, 506 insertions(+), 182 deletions(-) create mode 100644 src/context/UserContext.tsx diff --git a/docs/dog.sql b/docs/dog.sql index 4119425..3654740 100644 --- a/docs/dog.sql +++ b/docs/dog.sql @@ -1,11 +1,11 @@ -- phpMyAdmin SQL Dump --- version 5.1.3 +-- version 5.2.0 -- https://www.phpmyadmin.net/ -- --- Host: 10.35.232.188:3306 --- Erstellungszeit: 16. Dez 2022 um 10:38 --- Server-Version: 8.0.31 --- PHP-Version: 7.4.32 +-- Host: localhost +-- Erstellungszeit: 17. Dez 2022 um 00:33 +-- Server-Version: 10.4.27-MariaDB +-- PHP-Version: 8.1.12 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; @@ -29,14 +29,14 @@ SET time_zone = "+00:00"; CREATE TABLE `dogs` ( `id` int(11) NOT NULL, - `email` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL, - `qr_id` char(31) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL, - `name` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL, - `password` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL, - `phone` varchar(255) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci NOT NULL, - `qr_code` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL, - `picture` varchar(255) COLLATE utf8mb3_unicode_ci DEFAULT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci; + `email` varchar(255) NOT NULL, + `qr_id` char(31) NOT NULL, + `name` varchar(255) NOT NULL DEFAULT '', + `password` varchar(255) NOT NULL, + `phone` varchar(255) NOT NULL DEFAULT '', + `qr_code` varchar(255) DEFAULT NULL, + `picture` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- Indizes der exportierten Tabellen diff --git a/package-lock.json b/package-lock.json index 3bda589..29a2cf6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@types/node": "^16.18.9", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.9", + "axios": "^1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.4.5", @@ -4748,6 +4749,29 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", + "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", @@ -13645,6 +13669,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", diff --git a/package.json b/package.json index 710ee60..9ce9af1 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@types/node": "^16.18.9", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.9", + "axios": "^1.2.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.4.5", diff --git a/php/php-dog/AuthMiddleware.php b/php/php-dog/AuthMiddleware.php index 27ac358..6fd807f 100644 --- a/php/php-dog/AuthMiddleware.php +++ b/php/php-dog/AuthMiddleware.php @@ -79,7 +79,7 @@ class Auth protected function fetchUser($user_id) { try { - $fetch_user_by_id = "SELECT id, email, name, qr_id FROM dogs WHERE id=:id"; + $fetch_user_by_id = "SELECT id, email, qr_id FROM dogs WHERE id=:id"; $query_stmt = $this->db->prepare($fetch_user_by_id); $query_stmt->bindValue(':id', $user_id, PDO::PARAM_INT); $query_stmt->execute(); diff --git a/php/php-dog/classes/Database.php b/php/php-dog/classes/Database.php index 4192822..f1ef9bf 100644 --- a/php/php-dog/classes/Database.php +++ b/php/php-dog/classes/Database.php @@ -9,7 +9,8 @@ class Database private $db_username = 'k200835_user_dog'; private $db_password = 'X0pEiBsXN3RLazGhQVvP'; - public function dbConnection(){ + public function dbConnection() + { try { diff --git a/php/php-dog/classes/lib.php b/php/php-dog/classes/lib.php index db3cc27..ed0ecee 100644 --- a/php/php-dog/classes/lib.php +++ b/php/php-dog/classes/lib.php @@ -1,12 +1,12 @@ id = $id; $this->qr_id = $qr_id; $this->email = $email; - $this->name = $name; } } diff --git a/php/php-dog/getDog.php b/php/php-dog/getDog.php index 17c568b..f3e132c 100644 --- a/php/php-dog/getDog.php +++ b/php/php-dog/getDog.php @@ -51,12 +51,12 @@ else if($query_stmt->rowCount()) { $row = $query_stmt->fetch(PDO::FETCH_ASSOC); - $returnData = new CMsg((1,200,'get dog',$fields,$row); + $returnData = new CMsg(1,200,'get dog',$fields,$row); } } catch(PDOException $e) { - $returnData = new CMsg((0,500,$e->getMessage(),$fields); + $returnData = new CMsg(0,500,$e->getMessage(),$fields); } } echo $returnData->jsonarray(); diff --git a/php/php-dog/login.php b/php/php-dog/login.php index 09ba56c..7a83f46 100644 --- a/php/php-dog/login.php +++ b/php/php-dog/login.php @@ -14,90 +14,107 @@ $db_connection = new Database(); $conn = $db_connection->dbConnection(); $data = json_decode(file_get_contents("php://input")); +// $data = json_decode( +// '{ +// "email": "a@a.a", +// "password": "qwertzui" +// }' +// ); $returnData = new CMsg(0); // IF REQUEST METHOD IS NOT EQUAL TO POST -if($_SERVER["REQUEST_METHOD"] != "POST") -{ - $returnData = new CMsg(0,404,'Page Not Found!'); -} +// if($_SERVER["REQUEST_METHOD"] != "POST") +// { +// $returnData = new CMsg(0,404,'Page Not Found!'); +// echo $returnData->jsonarray(); +// return; +// } + // CHECKING EMPTY FIELDS -elseif( - !isset($data->qr_id) +if( + !isset($data->email) || !isset($data->password) - || empty(trim($data->qr_id)) + || empty(trim($data->email)) || empty(trim($data->password)) ) { - $fields = ['fields' => ['qr_id','password']]; + $fields = ['fields' => ['email','password']]; $returnData = new CMsg(0,422,'Please Fill in all Required Fields!',$fields); + echo $returnData->jsonarray(); + return; } -// IF THERE ARE NO EMPTY FIELDS THEN- -else -{ - $qr_id = trim($data->qr_id); - $password = trim($data->password); - - // IF PASSWORD IS LESS THAN 8 THE SHOW THE ERROR - if(strlen($password) < 8) +// IF THERE ARE NO EMPTY FIELDS THEN- +$email = trim($data->email); +$password = trim($data->password); + +if (!filter_var($email, FILTER_VALIDATE_EMAIL)) +{ + $returnData = new CMsg(0, 422, 'Invalid Email Address!'); + echo $returnData->jsonarray(); + return; +} + + +// IF PASSWORD IS LESS THAN 8 THE SHOW THE ERROR +if(strlen($password) < 8) +{ + $returnData = new CMsg(0,422,'Your password must be at least 8 characters long!'); + echo $returnData->jsonarray(); + return; +} + +// THE USER IS ABLE TO PERFORM THE LOGIN ACTION + +try +{ + $fetch_user_by_email = "SELECT id, qr_id, email, password FROM `dogs` WHERE `email`=:email"; + $query_stmt = $conn->prepare($fetch_user_by_email); + $query_stmt->bindValue(':email', $email,PDO::PARAM_STR); + $query_stmt->execute(); + + // IF THE USER IS FOUNDED BY EMAIL + if($query_stmt->rowCount()) { - $returnData = new CMsg(0,422,'Your password must be at least 8 characters long!'); + $row = $query_stmt->fetch(PDO::FETCH_ASSOC); + $check_password = password_verify($password, $row['password']); +// $check_password = $password == $row['password']; + + // VERIFYING THE PASSWORD (IS CORRECT OR NOT?) + // IF PASSWORD IS CORRECT THEN SEND THE LOGIN TOKEN + if ($check_password) + { + // $jwt = new JwtHandler(); + $user = new CUser( $row['id'], + $row['qr_id'], + $row['email'] + ); + $_SESSION['user'] = $user; + + $returnData = new CMsg( + 1, + 200, + 'You have successfully logged in.', + $fields, + $user); + } + // IF INVALID PASSWORD + else + { + $returnData = new CMsg(0,422,'Invalid Password!'); + } + + // IF THE USER IS NOT FOUNDED BY EMAIL THEN SHOW THE FOLLOWING ERROR } - // THE USER IS ABLE TO PERFORM THE LOGIN ACTION else { - try{ - - $fetch_user_by_qrid = "SELECT id, name, qr_id, email FROM `dogs` WHERE `qr_id`=:qr_id"; - $query_stmt = $conn->prepare($fetch_user_by_qrid); - $query_stmt->bindValue(':qr_id', $qr_id,PDO::PARAM_STR); - $query_stmt->execute(); - - // IF THE USER IS FOUNDED BY EMAIL - if($query_stmt->rowCount()) - { - $row = $query_stmt->fetch(PDO::FETCH_ASSOC); - $check_password = password_verify($password, $row['password']); - - // VERIFYING THE PASSWORD (IS CORRECT OR NOT?) - // IF PASSWORD IS CORRECT THEN SEND THE LOGIN TOKEN - if ($check_password) - { - // $jwt = new JwtHandler(); - $user = new CUser( $row['id'], - $row['qr_id'], - $row['email'], - $row['name'] - ); - $_SESSION['user'] = $user; - - $returnData = new CMsg( - 1, - 200, - 'You have successfully logged in.', - $fields, - $user); - } - // IF INVALID PASSWORD - else - { - $returnData = new CMsg(0,422,'Invalid Password!'); - } - - // IF THE USER IS NOT FOUNDED BY EMAIL THEN SHOW THE FOLLOWING ERROR - } - else - { - $returnData = new CMsg(0,422,'Invalid Email Address!'); - } - } - catch(PDOException $e) - { - $returnData = new CMsg(0,500,$e->getMessage()); - } + $returnData = new CMsg(0,422,'Invalid Email Address!'); } } +catch(PDOException $e) +{ + $returnData = new CMsg(0,500,$e->getMessage()); +} echo $returnData->jsonarray(); -?> \ No newline at end of file +?> diff --git a/php/php-dog/register.php b/php/php-dog/register.php index 2ae7494..eb0e9ec 100644 --- a/php/php-dog/register.php +++ b/php/php-dog/register.php @@ -19,69 +19,90 @@ $returnData = new CMsg(0); if ($_SERVER["REQUEST_METHOD"] != "POST") { $returnData = new CMsg(0, 404, 'Page Not Found!'); + echo $returnData->jsonarray(); + return; } -elseif ( - !isset($data->qr_id) - || !isset($data->nachname) - || !isset($data->email) + +if ( + !isset($data->email) || !isset($data->password) - || empty(trim($data->vorname)) - || empty(trim($data->nachname)) || empty(trim($data->email)) || empty(trim($data->password)) -) : +) +{ - $fields = ['fields' => ['vorname', 'nachname', 'email', 'password']]; + $fields = ['fields' => ['email', 'password']]; $returnData = new CMsg(0, 422, 'Please Fill in all Required Fields!', $fields); + echo $returnData->jsonarray(); + return; +} // IF THERE ARE NO EMPTY FIELDS THEN- -else : +$email = trim($data->email); +$password = trim($data->password); - $vorname = trim($data->vorname); - $nachname = trim($data->nachname); - $email = trim($data->email); - $password = trim($data->password); - if (!filter_var($email, FILTER_VALIDATE_EMAIL)) : - $returnData = msg(0, 422, 'Invalid Email Address!'); +if (!filter_var($email, FILTER_VALIDATE_EMAIL)) +{ + $returnData = new CMsg(0, 422, 'Invalid Email Address!'); + echo $returnData->jsonarray(); + return; +} - elseif (strlen($password) < 8) : - $returnData = new CMsg(0, 422, 'Your password must be at least 8 characters long!'); +if (strlen($password) < 8) +{ + $returnData = new CMsg(0, 422, 'Your password must be at least 8 characters long!'); + echo $returnData->jsonarray(); + return; +} - elseif (strlen($nachname) < 3) : - $returnData = new CMsg(0, 422, 'Your name must be at least 3 characters long!'); +try +{ + $maxtries = 100000; // prevent endless loop, most unlikely + $tries = 0; - else : - try { + $qr_id = random_str(6); + $count = 1; + while($count >= 1 && $tries < $maxtries) + { + $qr_id = random_str(6); - $check_email = "SELECT `email` FROM `users` WHERE `email`=:email"; - $check_email_stmt = $conn->prepare($check_email); - $check_email_stmt->bindValue(':email', $email, PDO::PARAM_STR); - $check_email_stmt->execute(); + $check_qr_id = "SELECT `qr_id` FROM `dogs` WHERE `qr_id`=:qr_id"; + $check_qr_id_stmt = $conn->prepare($check_qr_id); + $check_qr_id_stmt->bindValue(':qr_id', $qr_id, PDO::PARAM_STR); + $check_qr_id_stmt->execute(); - if ($check_email_stmt->rowCount()) : - $returnData = new CMsg(0, 422, 'This E-mail already in use!'); + $count = $check_qr_id_stmt->rowCount(); + ++$tries; + } + if ($tries >= $maxtries) + { + $result = new CMsg( + 0, + 507, + 'Too many users registered on the server, try it again later'); + } + else + { + $insert_query = "INSERT INTO `dogs`(`qr_id`,`email`,`password`) VALUES(:qr_id,:email,:password)"; - else : - $insert_query = "INSERT INTO `users`(`vorname`,`nachname`,`email`,`password`) VALUES(:vorname,:nachname,:email,:password)"; + $insert_stmt = $conn->prepare($insert_query); - $insert_stmt = $conn->prepare($insert_query); + // DATA BINDING + $insert_stmt->bindValue(':qr_id', htmlspecialchars(strip_tags($qr_id)), PDO::PARAM_STR); + $insert_stmt->bindValue(':email', $email, PDO::PARAM_STR); +// $insert_stmt->bindValue(':password', $password, PDO::PARAM_STR); + $insert_stmt->bindValue(':password', password_hash($password, PASSWORD_DEFAULT), PDO::PARAM_STR); - // DATA BINDING - $insert_stmt->bindValue(':vorname', htmlspecialchars(strip_tags($vorname)), PDO::PARAM_STR); - $insert_stmt->bindValue(':nachname', htmlspecialchars(strip_tags($nachname)), PDO::PARAM_STR); - $insert_stmt->bindValue(':email', $email, PDO::PARAM_STR); - $insert_stmt->bindValue(':password', password_hash($password, PASSWORD_DEFAULT), PDO::PARAM_STR); + $insert_stmt->execute(); - $insert_stmt->execute(); + $returnData = new CMsg(1, 201, 'You have successfully registered.'); + } - $returnData = new CMsg(1, 201, 'You have successfully registered.'); - - endif; - } catch (PDOException $e) { - $returnData = new CMsg(0, 500, $e->getMessage()); - } - endif; -endif; +} +catch (PDOException $e) +{ + $returnData = new CMsg(0, 500, $e->getMessage()); +} echo $returnData->jsonarray(); -?> \ No newline at end of file +?> diff --git a/php/php-dog/upload.php b/php/php-dog/upload.php index 7853897..be635bb 100644 --- a/php/php-dog/upload.php +++ b/php/php-dog/upload.php @@ -41,7 +41,7 @@ if(!in_array($fileType, $allowTypes)) } $newFilename = getNewFilename($targetDir, $fileType, 20); -if($newFilename.strlen() == 0) +if(strlen($newFilename) == 0) { $result = new CMsg( 0, diff --git a/public/index.html b/public/index.html index aa069f2..ed1fb15 100644 --- a/public/index.html +++ b/public/index.html @@ -9,7 +9,6 @@ name="description" content="Web site created using create-react-app" /> -