From 6016b45d94faf128322c33bb55fe741c2b66d043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fouch=C3=A9?= Date: Mon, 8 Apr 2024 10:01:01 +0200 Subject: [PATCH 1/7] Add Login token --- src/js/AJAX/lib.js | 0 src/php/db/Login.php | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 src/js/AJAX/lib.js diff --git a/src/js/AJAX/lib.js b/src/js/AJAX/lib.js new file mode 100644 index 0000000..e69de29 diff --git a/src/php/db/Login.php b/src/php/db/Login.php index 58fd748..ce3ec13 100644 --- a/src/php/db/Login.php +++ b/src/php/db/Login.php @@ -101,15 +101,15 @@ class LoginPatient { public static function Login($pdo,$mail,$password) : void { if(LoginPatient::checkMail($pdo,$mail)){ - $query = $pdo->prepare("SELECT p_id,p_password FROM patient where p_mail = :mail"); + $query = $pdo->prepare("SELECT p_id,p_password,p_name,p_surname,p_mail FROM patient where p_mail = :mail"); $query->bindParam(':mail', $mail); $query->execute(); $result = $query->fetch(PDO::FETCH_ASSOC); if(password_verify($password,$result['p_password'])){ - Response::HTTP200(['message' => 'Login success', 'id' => $result['p_id']]); + Response::HTTP200(['message' => 'Login success', 'token' => base64_encode("patient:".strval($result['p_id']).":".$result['p_name'].":".$result['p_surname'].":".$result['p_mail'])]); } else { - Response::HTTP401(['message' => 'Login failed', 'id' => 0]); + Response::HTTP401(['message' => 'Login failed', 'token' => 0]); } } } @@ -133,15 +133,15 @@ class LoginMedecin { public static function Login($pdo,$mail,$password) : void { if(LoginMedecin::checkMail($pdo,$mail)){ - $query = $pdo->prepare("SELECT m_id, m_password FROM medecin where m_mail = :mail"); + $query = $pdo->prepare("SELECT m_id, m_password,m_name,m_surname,m_mail FROM medecin where m_mail = :mail"); $query->bindParam(':mail', $mail); $query->execute(); $result = $query->fetch(PDO::FETCH_ASSOC); if(password_verify($password,$result['m_password'])){ - Response::HTTP200(['message' => 'Login success', 'id' => $result['m_id']]); + Response::HTTP200(['message' => 'Login success', 'token' => base64_encode("medecin:".strval($result['m_id']).":".$result['m_name'].":".$result['m_surname'].":".$result['m_mail'])]); } else { - Response::HTTP401(['message' => 'Login failed', 'id' => 0]); + Response::HTTP401(['message' => 'Login failed', 'token' => 0]); } } } From 8deeb4225b734d1a3fb08300d4b830387cac00cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fouch=C3=A9?= Date: Mon, 8 Apr 2024 10:01:16 +0200 Subject: [PATCH 2/7] Add Login token --- src/js/AJAX/lib.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/js/AJAX/lib.js b/src/js/AJAX/lib.js index e69de29..18c047e 100644 --- a/src/js/AJAX/lib.js +++ b/src/js/AJAX/lib.js @@ -0,0 +1,14 @@ +console.log("lib.js loaded"); + +function TokenDecode(token){ + let decodedToken = atob(token); + decodedToken = decodedToken.split(":"); + return { + type: decodedToken[0], + id: decodedToken[1], + name: decodedToken[2], + surname: decodedToken[3], + mail: decodedToken[4] + + }; +} \ No newline at end of file From 388d723e8a8a541d600dd5d24887540ca307c514 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Wed, 10 Apr 2024 09:22:45 +0200 Subject: [PATCH 3/7] Temp mokup for login, start login in ajax, bug with the click on signup to login --- Request_Test/testHTTP.http | 8 ++ index.php | 17 +--- src/API/requests.php | 5 + src/css/styles.css | 52 ++++++++-- src/js/AJAX/index.js | 162 +++++++++++++++++++++++++++++- src/php/components/user-login.php | 2 +- 6 files changed, 223 insertions(+), 23 deletions(-) diff --git a/Request_Test/testHTTP.http b/Request_Test/testHTTP.http index 4f99b02..b6ac60f 100644 --- a/Request_Test/testHTTP.http +++ b/Request_Test/testHTTP.http @@ -52,3 +52,11 @@ test = "coucou" ### +POST http://serveur-projet-s4.felix/src/API/requests.php/api/login/patient +Content-Type: application/x-www-form-urlencoded + +mail = "nicolasgrenier@example.com" & +password = "a" + +### + diff --git a/index.php b/index.php index c630bae..eb15669 100644 --- a/index.php +++ b/index.php @@ -13,20 +13,6 @@ - diff --git a/src/API/requests.php b/src/API/requests.php index f044578..a4f9365 100644 --- a/src/API/requests.php +++ b/src/API/requests.php @@ -104,4 +104,9 @@ $router->POST('/api/create-rdv', ["medID", "date", "time", "lieu"], function($me CreateRDV($pdo, $medID, $date, $time, $lieu); }); +$router->POST('/api/login/patient', ["mail", "password"], function($mail, $password){ + global $pdo; + loginPatient::Login($pdo, $mail, $password); +}); + $router->run(); diff --git a/src/css/styles.css b/src/css/styles.css index 793c3d9..e83a622 100644 --- a/src/css/styles.css +++ b/src/css/styles.css @@ -4,6 +4,7 @@ body{ margin: 0; padding: 0; font-family: 'Roboto', sans-serif; + min-height: 100vh; } #DoctISEN{ @@ -15,6 +16,49 @@ body{ cursor: pointer; } +.login-ui{ + height: 78vh; + background-color: #EEF2F7; +} + +.signup-ui{ + height: 100vh; + background-color: #EEF2F7; +} + +#signup-sign-part{ + background-color: white; + height: 75%; + display: flex; + flex-direction: column; + gap: 1em; + border-radius: 20px; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); +} + + +#login-part{ + background-color: white; + height: 45%; + display: flex; + flex-direction: column; + gap: 1em; + border-radius: 20px; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); + margin-top: 10%; +} + +#signup-part{ + background-color: white; + height: 15%; + display: flex; + flex-direction: column; + gap: 1em; + border-radius: 20px; + box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1); + margin-top: 10%; +} + #topbar{ background-color: #ff0000; height: 22vh; @@ -78,13 +122,7 @@ body{ padding-top: 5%; } -.logButton{ - width: 30%; - height: 100%; - background-color: #ff0000; - color: white; - font-weight: bold; -} + .pointer{ cursor: pointer; diff --git a/src/js/AJAX/index.js b/src/js/AJAX/index.js index 919777b..46efda6 100644 --- a/src/js/AJAX/index.js +++ b/src/js/AJAX/index.js @@ -249,6 +249,7 @@ function displayHome() {

Annuaire des médecins du CNOM • Annuaire des chirurgiens-dentistes de l'ONCD • Ordre National des Médecins • Ordre National des Chirurgiens-Dentistes

`; attachSearchEventListener(); + attachLoginUserDisplayEventListener(); displayAlert("Rendez-vous pris avec succès"); } @@ -279,6 +280,158 @@ function performSearch(event) { } } +function displayLoginUser() { + let container = document.getElementById("content"); + container.innerHTML = ""; + container.classList.add("d-flex", "flex-column", "justify-content-center", "text-center", "w-100", "login-ui"); + container.innerHTML = ` +
`; + document.getElementById("user-login-button").addEventListener("click", function(event) { + event.preventDefault(); + let mail = document.getElementById("user-login-mail").value; + 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); + displayHome(); + } else { + alert("Erreur lors de la connexion"); + } + }, data); + }); + document.getElementById("signup-user").addEventListener("click", function(event) { + displaySignUpUser(); + }); +} + +function displaySignUpUser() { + let container = document.getElementById("content"); + container.innerHTML = ""; + container.classList.add("d-flex", "flex-column", "justify-content-center", "text-center", "w-100", "signup-ui"); + container.classList.remove("login-ui"); + container.innerHTML = ` +
+
+
+
Inscription sur Doct'ISEN
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
Déjà inscrit ?
+ + + +
+
+
+
`; + document.getElementById("login-user").addEventListener("click", function(event) { + console.log("login-user clicked"); + displayLoginUser(); + }); + document.getElementById("user-signup-button").addEventListener("click", function(event) { + event.preventDefault(); + let name = document.getElementById("user-signup-name").value; + let surname = document.getElementById("user-signup-surname").value; + let mail = document.getElementById("user-signup-mail").value; + let mailConfirm = document.getElementById("user-signup-mail-confirm").value; + let password = document.getElementById("user-signup-password").value; + let passwordConfirm = document.getElementById("user-signup-password-confirm").value; + let phone = document.getElementById("user-signup-phone").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 + "&phone=" + phone; + ajaxRequest('POST', "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(); + } else { + alert("Erreur lors de l'inscription"); + } + }, data); + }); +} + function attachSearchEventListener() { try{ document.getElementById("recherche").addEventListener("click", function (event) { @@ -322,6 +475,12 @@ function attachPrendreRDVEventListener() { }); } +function attachLoginUserDisplayEventListener() { + document.getElementById("login-user").addEventListener("click", function (event) { + displayLoginUser(); + }); +} + //Yanis Part function DisplayRDVPraticient(rdv){ @@ -383,4 +542,5 @@ function ButtonShowRdvPraticient() { //End Call ButtonShowRdvPraticient(); -attachSearchEventListener(); \ No newline at end of file +attachSearchEventListener(); +attachLoginUserDisplayEventListener(); \ No newline at end of file diff --git a/src/php/components/user-login.php b/src/php/components/user-login.php index c97b6fb..07b4130 100644 --- a/src/php/components/user-login.php +++ b/src/php/components/user-login.php @@ -24,7 +24,7 @@ echo 'Mon calendrier'; } } else { - echo '

'; + echo '

'; } } ?> \ No newline at end of file From 1d27b68318e17b6d7b823078589005fb3c7a453d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Wed, 10 Apr 2024 09:35:16 +0200 Subject: [PATCH 4/7] Fix click bug --- src/API/requests.php | 5 ----- src/css/styles.css | 1 - src/js/AJAX/index.js | 28 ++++++++++------------------ 3 files changed, 10 insertions(+), 24 deletions(-) diff --git a/src/API/requests.php b/src/API/requests.php index a4f9365..f044578 100644 --- a/src/API/requests.php +++ b/src/API/requests.php @@ -104,9 +104,4 @@ $router->POST('/api/create-rdv', ["medID", "date", "time", "lieu"], function($me CreateRDV($pdo, $medID, $date, $time, $lieu); }); -$router->POST('/api/login/patient', ["mail", "password"], function($mail, $password){ - global $pdo; - loginPatient::Login($pdo, $mail, $password); -}); - $router->run(); diff --git a/src/css/styles.css b/src/css/styles.css index e83a622..9774885 100644 --- a/src/css/styles.css +++ b/src/css/styles.css @@ -50,7 +50,6 @@ body{ #signup-part{ background-color: white; - height: 15%; display: flex; flex-direction: column; gap: 1em; diff --git a/src/js/AJAX/index.js b/src/js/AJAX/index.js index 46efda6..c849d1e 100644 --- a/src/js/AJAX/index.js +++ b/src/js/AJAX/index.js @@ -283,7 +283,7 @@ function performSearch(event) { function displayLoginUser() { let container = document.getElementById("content"); container.innerHTML = ""; - container.classList.add("d-flex", "flex-column", "justify-content-center", "text-center", "w-100", "login-ui"); + container.className = 'd-flex flex-column justify-content-center text-center w-100 login-ui'; container.innerHTML = `
@@ -302,12 +302,6 @@ function displayLoginUser() {
- -
@@ -344,8 +338,7 @@ function displayLoginUser() { function displaySignUpUser() { let container = document.getElementById("content"); container.innerHTML = ""; - container.classList.add("d-flex", "flex-column", "justify-content-center", "text-center", "w-100", "signup-ui"); - container.classList.remove("login-ui"); + container.className = 'd-flex flex-column justify-content-center text-center w-100 signup-ui'; container.innerHTML = `
@@ -358,7 +351,7 @@ function displaySignUpUser() {
- +
@@ -369,16 +362,16 @@ function displaySignUpUser() {
- - + +
- - + +
- +
@@ -388,15 +381,14 @@ function displaySignUpUser() {
Déjà inscrit ?
- +
`; - document.getElementById("login-user").addEventListener("click", function(event) { - console.log("login-user clicked"); + document.getElementById("login-user2").addEventListener("click", function(event) { displayLoginUser(); }); document.getElementById("user-signup-button").addEventListener("click", function(event) { From 3dd5a328ac7c84bee9d6fd9c7e67a4e458973b5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20MARQUET?= Date: Wed, 10 Apr 2024 09:45:08 +0200 Subject: [PATCH 5/7] Add login and signup page for praticien --- src/css/styles.css | 5 ++ src/js/AJAX/index.js | 151 +++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 151 insertions(+), 5 deletions(-) diff --git a/src/css/styles.css b/src/css/styles.css index 9774885..c5e5821 100644 --- a/src/css/styles.css +++ b/src/css/styles.css @@ -26,6 +26,11 @@ body{ background-color: #EEF2F7; } +.signup-ui-praticien{ + height: 125vh; + background-color: #EEF2F7; +} + #signup-sign-part{ background-color: white; height: 75%; diff --git a/src/js/AJAX/index.js b/src/js/AJAX/index.js index c849d1e..b0d4026 100644 --- a/src/js/AJAX/index.js +++ b/src/js/AJAX/index.js @@ -296,7 +296,7 @@ function displayLoginUser() {
- +
@@ -335,6 +335,127 @@ function displayLoginUser() { }); } +function displayLoginPraticien() { + let container = document.getElementById("content"); + 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
+
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
Nouveau praticien sur Doct'ISEN?
+ + + +
+
+
`; + document.getElementById("praticien-login-button").addEventListener("click", function(event) { + event.preventDefault(); + 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); + displayHome(); + } else { + alert("Erreur lors de la connexion"); + } + }, data); + }); + document.getElementById("signup-praticien").addEventListener("click", function(event) { + displaySignUpPraticien(); + }); +} + +function displaySignUpPraticien() { + let container = document.getElementById("content"); + 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
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+
+
+
Déjà inscrit en tant que praticien ?
+ + + +
+
+
+
`; + document.getElementById("login-praticien2").addEventListener("click", function(event) { + displayLoginPraticien(); + }); +} + function displaySignUpUser() { let container = document.getElementById("content"); container.innerHTML = ""; @@ -468,11 +589,30 @@ function attachPrendreRDVEventListener() { } function attachLoginUserDisplayEventListener() { - document.getElementById("login-user").addEventListener("click", function (event) { - displayLoginUser(); - }); + try { + document.getElementById("login-user").addEventListener("click", function (event) { + displayLoginUser(); + }); + } + catch (e) { + //Do nothing + //console.error(e); + } } +function attachLoginPraticienDisplayEventListener() { + try { + document.getElementById("login-praticien").addEventListener("click", function (event) { + displayLoginPraticien(); + }); + } + catch (e) { + //Do nothing + //console.error(e); + } +} + + //Yanis Part function DisplayRDVPraticient(rdv){ @@ -535,4 +675,5 @@ function ButtonShowRdvPraticient() { ButtonShowRdvPraticient(); attachSearchEventListener(); -attachLoginUserDisplayEventListener(); \ No newline at end of file +attachLoginUserDisplayEventListener(); +attachLoginPraticienDisplayEventListener(); \ No newline at end of file From 395f0e2744022b16cde78f7c84c27e45baee5a69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fouch=C3=A9?= Date: Mon, 8 Apr 2024 10:01:01 +0200 Subject: [PATCH 6/7] Add Login token --- src/js/AJAX/lib.js | 0 src/php/db/Login.php | 12 ++++++------ 2 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 src/js/AJAX/lib.js diff --git a/src/js/AJAX/lib.js b/src/js/AJAX/lib.js new file mode 100644 index 0000000..e69de29 diff --git a/src/php/db/Login.php b/src/php/db/Login.php index 58fd748..ce3ec13 100644 --- a/src/php/db/Login.php +++ b/src/php/db/Login.php @@ -101,15 +101,15 @@ class LoginPatient { public static function Login($pdo,$mail,$password) : void { if(LoginPatient::checkMail($pdo,$mail)){ - $query = $pdo->prepare("SELECT p_id,p_password FROM patient where p_mail = :mail"); + $query = $pdo->prepare("SELECT p_id,p_password,p_name,p_surname,p_mail FROM patient where p_mail = :mail"); $query->bindParam(':mail', $mail); $query->execute(); $result = $query->fetch(PDO::FETCH_ASSOC); if(password_verify($password,$result['p_password'])){ - Response::HTTP200(['message' => 'Login success', 'id' => $result['p_id']]); + Response::HTTP200(['message' => 'Login success', 'token' => base64_encode("patient:".strval($result['p_id']).":".$result['p_name'].":".$result['p_surname'].":".$result['p_mail'])]); } else { - Response::HTTP401(['message' => 'Login failed', 'id' => 0]); + Response::HTTP401(['message' => 'Login failed', 'token' => 0]); } } } @@ -133,15 +133,15 @@ class LoginMedecin { public static function Login($pdo,$mail,$password) : void { if(LoginMedecin::checkMail($pdo,$mail)){ - $query = $pdo->prepare("SELECT m_id, m_password FROM medecin where m_mail = :mail"); + $query = $pdo->prepare("SELECT m_id, m_password,m_name,m_surname,m_mail FROM medecin where m_mail = :mail"); $query->bindParam(':mail', $mail); $query->execute(); $result = $query->fetch(PDO::FETCH_ASSOC); if(password_verify($password,$result['m_password'])){ - Response::HTTP200(['message' => 'Login success', 'id' => $result['m_id']]); + Response::HTTP200(['message' => 'Login success', 'token' => base64_encode("medecin:".strval($result['m_id']).":".$result['m_name'].":".$result['m_surname'].":".$result['m_mail'])]); } else { - Response::HTTP401(['message' => 'Login failed', 'id' => 0]); + Response::HTTP401(['message' => 'Login failed', 'token' => 0]); } } } From cba90ac648435850164961d4c45264f802661fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Fouch=C3=A9?= Date: Mon, 8 Apr 2024 10:01:16 +0200 Subject: [PATCH 7/7] Add Login token --- src/js/AJAX/lib.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/js/AJAX/lib.js b/src/js/AJAX/lib.js index e69de29..18c047e 100644 --- a/src/js/AJAX/lib.js +++ b/src/js/AJAX/lib.js @@ -0,0 +1,14 @@ +console.log("lib.js loaded"); + +function TokenDecode(token){ + let decodedToken = atob(token); + decodedToken = decodedToken.split(":"); + return { + type: decodedToken[0], + id: decodedToken[1], + name: decodedToken[2], + surname: decodedToken[3], + mail: decodedToken[4] + + }; +} \ No newline at end of file