From b3e0c556db2edeac455e2aa992ad246bb2698cfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Sat, 13 Apr 2024 19:04:53 +0200 Subject: [PATCH] Login and signup using ajax --- index.php | 2 +- src/API/requests.php | 12 +++++++ src/css/styles.css | 7 +++- src/js/AJAX/index.js | 75 +++++++++++++++++++++++++++++-------------- src/js/AJAX/lib.js | 4 ++- src/php/db/Signup.php | 13 ++++---- 6 files changed, 80 insertions(+), 33 deletions(-) diff --git a/index.php b/index.php index eb15669..40fdcb9 100644 --- a/index.php +++ b/index.php @@ -9,7 +9,7 @@ - + diff --git a/src/API/requests.php b/src/API/requests.php index f044578..d3ac587 100644 --- a/src/API/requests.php +++ b/src/API/requests.php @@ -5,6 +5,7 @@ require_once '../php/constants.php'; require_once '../php/db/dbconnect.php'; require_once '../php/db/Search.php'; require_once '../php/db/Login.php'; +require_once '../php/db/Signup.php'; require_once '../php/db/Calendrier.php'; require_once 'test/database.php'; ini_set('display_errors', 1); @@ -65,10 +66,21 @@ $router->POST('/api/login/patient', ["mail", "password"], function($mail, $passw loginPatient::Login($pdo, $mail, $password); }); +$router->PUT('/api/signup/patient', ["mail", "password", "name", "surname", "phone"], function($mail, $password, $name, $surname, $phone){ + global $pdo; + SignupPatient::Insert($pdo, $mail, $password, $name, $surname, $phone); +}); + $router->POST('/api/login/medecin', ["mail", "password"], function($mail, $password){ global $pdo; loginMedecin::Login($pdo, $mail, $password); }); + +$router->PUT('/api/signup/medecin', ["name", "surname", "mail", "password", "specialite", "phone", "postal"], function($name, $surname, $mail, $password, $specialite, $phone, $postal){ + global $pdo; + SignupMedecin::insertMedecin($pdo, $name, $surname, $mail, $password, $specialite, $phone, $postal); +}); + $router->PUT('/api/requests', ["test"], function($test){ echo json_encode($test); }); diff --git a/src/css/styles.css b/src/css/styles.css index c5e5821..de23199 100644 --- a/src/css/styles.css +++ b/src/css/styles.css @@ -33,7 +33,7 @@ body{ #signup-sign-part{ background-color: white; - height: 75%; + height: 80%; display: flex; flex-direction: column; gap: 1em; @@ -159,6 +159,11 @@ margin-left: 6rem !important; margin-right: 24rem !important; } +.mx-25{ + margin-left: 25% !important; + margin-right: 25% !important; +} + .thumbnail{ max-width: 100%; height: auto; diff --git a/src/js/AJAX/index.js b/src/js/AJAX/index.js index b0d4026..bddab30 100644 --- a/src/js/AJAX/index.js +++ b/src/js/AJAX/index.js @@ -1,5 +1,7 @@ +import {TokenDecode} from "./lib.js"; console.log("index.js loaded"); + //Felix Part function displaySearchResults(data) { @@ -285,7 +287,7 @@ function displayLoginUser() { container.innerHTML = ""; container.className = 'd-flex flex-column justify-content-center text-center w-100 login-ui'; container.innerHTML = ` -
+
J'ai déjà un compte Doct'ISEN
@@ -318,12 +320,13 @@ function displayLoginUser() { let password = document.getElementById("user-login-password").value; let data = "mail=" + mail + "&password=" + password; ajaxRequest('POST', "src/API/requests.php/api/login/patient", function (data) { - if (data.success) { - sessionStorage.setItem("user_id", data.id); - sessionStorage.setItem("user_type", "patient"); - sessionStorage.setItem("user_mail", mail); - sessionStorage.setItem("user_name", data.name); - sessionStorage.setItem("user_surname", data.surname); + if (data.message === "Login success") { + const token_decoded = TokenDecode(data.token); + sessionStorage.setItem("user_type", token_decoded.type); + sessionStorage.setItem("user_id", token_decoded.id); + sessionStorage.setItem("user_mail", token_decoded.mail); + sessionStorage.setItem("user_name", token_decoded.name); + sessionStorage.setItem("user_surname", token_decoded.surname); displayHome(); } else { alert("Erreur lors de la connexion"); @@ -340,7 +343,7 @@ function displayLoginPraticien() { container.innerHTML = ""; container.className = 'd-flex flex-column justify-content-center text-center w-100 login-ui'; container.innerHTML = ` -
+
J'ai déjà un compte praticien Doct'ISEN
@@ -372,13 +375,14 @@ function displayLoginPraticien() { let mail = document.getElementById("praticien-login-mail").value; let password = document.getElementById("praticien-login-password").value; let data = "mail=" + mail + "&password=" + password; - ajaxRequest('POST', "src/API/requests.php/api/login/praticien", function (data) { - if (data.success) { - sessionStorage.setItem("user_id", data.id); - sessionStorage.setItem("user_type", "praticien"); - sessionStorage.setItem("user_mail", mail); - sessionStorage.setItem("user_name", data.name); - sessionStorage.setItem("user_surname", data.surname); + ajaxRequest('POST', "src/API/requests.php/api/login/medecin", function (data) { + if (data.message === "Login success") { + const token_decoded = TokenDecode(data.token); + sessionStorage.setItem("user_type", token_decoded.type); + sessionStorage.setItem("user_id", token_decoded.id); + sessionStorage.setItem("user_mail", token_decoded.mail); + sessionStorage.setItem("user_name", token_decoded.name); + sessionStorage.setItem("user_surname", token_decoded.surname); displayHome(); } else { alert("Erreur lors de la connexion"); @@ -395,7 +399,7 @@ function displaySignUpPraticien() { container.innerHTML = ""; container.className = 'd-flex flex-column justify-content-center text-center w-100 signup-ui-praticien'; container.innerHTML = ` -
+
Inscription praticien sur Doct'ISEN
@@ -454,6 +458,34 @@ function displaySignUpPraticien() { document.getElementById("login-praticien2").addEventListener("click", function(event) { displayLoginPraticien(); }); + document.getElementById("praticien-signup-button").addEventListener("click", function(event) { + event.preventDefault(); + let name = document.getElementById("praticien-signup-name").value; + let surname = document.getElementById("praticien-signup-surname").value; + let mail = document.getElementById("praticien-signup-mail").value; + let mailConfirm = document.getElementById("praticien-signup-mail-confirm").value; + let password = document.getElementById("praticien-signup-password").value; + let passwordConfirm = document.getElementById("praticien-signup-password-confirm").value; + let phone = document.getElementById("praticien-signup-phone").value; + let specialty = document.getElementById("praticien-signup-specialty").value; + let postal = document.getElementById("praticien-signup-postal").value; + if (mail !== mailConfirm) { + alert("Les adresses mail ne correspondent pas"); + return; + } + if (password !== passwordConfirm) { + alert("Les mots de passe ne correspondent pas"); + return; + } + let data = "name=" + name + "&surname=" + surname + "&mail=" + mail + "&password=" + password + "&specialite=" + specialty + "&phone=" + phone + "&postal=" + postal; + ajaxRequest('PUT', "src/API/requests.php/api/signup/medecin", function (data) { + if (data.success) { + displayLoginPraticien(); + } else { + alert("Erreur lors de l'inscription"); + } + }, data); + }); } function displaySignUpUser() { @@ -461,7 +493,7 @@ function displaySignUpUser() { container.innerHTML = ""; container.className = 'd-flex flex-column justify-content-center text-center w-100 signup-ui'; container.innerHTML = ` -
+
Inscription sur Doct'ISEN
@@ -530,14 +562,9 @@ function displaySignUpUser() { return; } let data = "name=" + name + "&surname=" + surname + "&mail=" + mail + "&password=" + password + "&phone=" + phone; - ajaxRequest('POST', "src/API/requests.php/api/signup/patient", function (data) { + ajaxRequest('PUT', "src/API/requests.php/api/signup/patient", function (data) { if (data.success) { - sessionStorage.setItem("user_id", data.id); - sessionStorage.setItem("user_type", "patient"); - sessionStorage.setItem("user_mail", mail); - sessionStorage.setItem("user_name", name); - sessionStorage.setItem("user_surname", surname); - displayHome(); + displayLoginUser(); } else { alert("Erreur lors de l'inscription"); } diff --git a/src/js/AJAX/lib.js b/src/js/AJAX/lib.js index 18c047e..87ed7dc 100644 --- a/src/js/AJAX/lib.js +++ b/src/js/AJAX/lib.js @@ -11,4 +11,6 @@ function TokenDecode(token){ mail: decodedToken[4] }; -} \ No newline at end of file +} + +export {TokenDecode}; \ No newline at end of file diff --git a/src/php/db/Signup.php b/src/php/db/Signup.php index 955b8b6..26610c4 100644 --- a/src/php/db/Signup.php +++ b/src/php/db/Signup.php @@ -2,7 +2,8 @@ class SignupPatient { - public static function Insert($pdo,$name,$surname,$mail,$password,$phone){ + public static function Insert($pdo, $mail, $password, $name, $surname, $phone): void + { $password = password_hash($password, PASSWORD_ARGON2ID); $query = $pdo->prepare("INSERT INTO patient (p_name,p_surname,p_mail,p_password,p_phone) VALUES (:name,:surname,:mail,:password,:phone)"); $query->bindParam(':name', $name); @@ -17,9 +18,9 @@ class SignupPatient $query->execute(); $result = $query->fetch(PDO::FETCH_ASSOC); if ($result['count'] == 0) { - return false; + Response::HTTP401(['message' => 'Signup failed', 'token' => 0]); } else { - return true; + Response::HTTP200(['message' => 'Signup success', 'success' => true]); } } @@ -27,7 +28,7 @@ class SignupPatient class SignupMedecin { - public static function insertMedecin($pdo,$name,$surname,$mail,$password,$specialite,$phone,$postal) { + public static function insertMedecin($pdo, $name, $surname, $mail, $password, $specialite, $phone, $postal) { $password = password_hash($password, PASSWORD_ARGON2ID); $query = $pdo->prepare("INSERT INTO medecin (m_name,m_surname,m_mail,m_password,m_specialty,m_phone,m_postal) VALUES (:name,:surname,:mail,:password,:specialite,:phone,:postal)"); $query->bindParam(':name', $name); @@ -44,9 +45,9 @@ class SignupMedecin $query->execute(); $result = $query->fetch(PDO::FETCH_ASSOC); if ($result['count'] == 0) { - return false; + Response::HTTP401(['message' => 'Signup failed', 'token' => 0]); } else { - return true; + Response::HTTP200(['message' => 'Signup success', 'success' => true]); } } } \ No newline at end of file