From a1046405067a871078f43ea5325c2a6805b8a6e1 Mon Sep 17 00:00:00 2001
From: "narindra.rajohnso" <narindra-hasimanjaka-david.rajohnson@etu.hesge.ch>
Date: Tue, 16 May 2023 02:58:29 +0200
Subject: [PATCH] feat: add check for connect users

---
 API/src/database/Database.ts             |  21 +++++++++++++++++++--
 API/src/database/database.sqlite         | Bin 20480 -> 20480 bytes
 API/src/database/migrations/User_init.ts |  12 ++++++++++++
 API/src/database/models/User.ts          |   3 +++
 API/src/routes/middleware.ts             |  14 ++++++++++----
 API/src/routes/router-admin.ts           |   2 +-
 API/src/routes/router-guest.ts           |  12 +++++++++++-
 7 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/API/src/database/Database.ts b/API/src/database/Database.ts
index 7926aba..aed639a 100644
--- a/API/src/database/Database.ts
+++ b/API/src/database/Database.ts
@@ -34,7 +34,7 @@ export class Database{
         return Database._instance;
     }
 
-    static async createAccount(username: string, password: string, accountType: userType): Promise<[number, string]> {
+    static async createAccount(username: string, password: string, firstname: string, lastname: string, email:string, accountType: userType): Promise<[number, string]> {
         let result: [number, string];
         const user = await User.findOne({where: {username}});
 
@@ -46,6 +46,9 @@ export class Database{
             await User.create({
                 username: username,
                 password: password,
+                lastname: lastname,
+                firstname: firstname,
+                email: email,
                 type: accountType === userType.Gamer ? 'user' : 'admin'
             }).then(user => {
                 console.log(`Utilisateur "${user.username}" ajouté avec succès !`);
@@ -87,6 +90,17 @@ export class Database{
 
     }
 
+    static async checkUserPassword(username: string, password: string): Promise<boolean>{
+        const user= await User.findOne({ where: { username } });
+        if(user){
+            return password==user.dataValues.password
+        }else{
+            return false
+        }
+
+
+    }
+
 
     static async getAllUsers(): Promise<User[]>{
         return await User.findAll();
@@ -104,10 +118,13 @@ export class Database{
         return await Question.destroy({ where: { id: id } });
     }
 
-    static async updateUserAccount(username: string, password?:string, typeUser?: userType){
+    static async updateUserAccount(username: string, password?:string, firstname?: string, lastname?: string, email?: string, typeUser?: userType){
         let updatedData: User=new User();
         updatedData.username=username;
         if(password!==undefined) updatedData.password = password;
+        if(firstname!==undefined) updatedData.firstname = firstname;
+        if(lastname!==undefined) updatedData.lastname = lastname;
+        if(email!==undefined) updatedData.email = email;
         if(typeUser!==undefined) updatedData.type = typeUser===userType.Gamer?'user':'admin';
         console.log(`updatedDate=${updatedData}`)
 
diff --git a/API/src/database/database.sqlite b/API/src/database/database.sqlite
index 62529667cf8732a4e82d5028fddb2338c4399ca7..5a843bb909e96719d7fe7976748a1bcf9692a046 100644
GIT binary patch
delta 473
zcmZozz}T>Wae}m<HUk3#D+2;>P1G?K)n?F3d&$eYi-Cp5fPpuIuaEyMkHN;qJ>1Mq
zrtF*d@|rSE&fpDV;s3#KW%54W6GCk4Y+w_bY*^XF#l;z0!YBXXE9XedEGjO^OU#`d
zz$eX~lL%+CrsgJQ=1dOclbT%2AI-=%`8>Z7Hv<C$6TcDze;>cnW<dop{`xE?PH{zH
zQDsq2&y?b{;*`Sj)S{BA(#-sVq{QOllr%7QNH0p)OG+y(PAxJrFf!IPFx53QQ!p^F
zGBvd_u+%d)Gf>brFt9Q(z%N_C$SJBWEU7B)>6wz4R+5~WoSB_kTvD1>l3HAnl2}%h
zn3bOa<~WpOmXzuxXC$WNX6C^SHB~S&wlX%fGBDONGPFRq600m1*u(D__<!)f+brnt
zfM11yfs<LB5$sncc4kpdkV|+$;VJ+k7??pCHVYVh;b&tIU|`_?2-Y<*fQyHpv9L6?
LxFj<_ub2w}>zsEr

delta 602
zcmZozz}T>Wae}m<A_D^hD+2;BP1G?KRb<dhd&$fHgMo!NgMsf8|5@H$ycwGX1-|f1
z&fpDVX)<MIpS+Lv#N=2${>j|Dv0RN2jO^m#;*8DwlV|XiPcG(<W@MUtp5KU{?;8U%
z-)si{rF^sb1Njzi78K~_tB+)2lT;P=^h`|2&CD}QOixWONKGxsPtQsPix?Rg8S5ID
z>KYg+7#docm|K||>scBbDQFuQSQ!`~$r>418Jbub8R{7u7(iti7#O0Z#XUXqQp?RP
zvW@eKQq%L$4XrmavNEu=GBDLMFgJzjLo?Ob%E&;^#M}@n%fP@8r7RxA%qA`^ifVRg
zacU8&Ui>DTSX!CX8|oQbm_v<@WMmW96!r8hNi8lhDo!a*ODs-FODj%EODRT}ZK7*r
z0SXHPLn~u5J!7=6z$MGYz`(%F|A>MA4gVwl@BBAlalBbl;V{1`7sy6a7EWeyMsQ#;
zb1_RYf`iJCiGx|36C`cK%iqbs#OKVw=gfDACx|C#vw*=Del|w_j|}`DHw!vE=ARhA
V!q3adEYDb2np#|vnV(n81ptW5kK+IU

diff --git a/API/src/database/migrations/User_init.ts b/API/src/database/migrations/User_init.ts
index 034bc4b..50e4535 100644
--- a/API/src/database/migrations/User_init.ts
+++ b/API/src/database/migrations/User_init.ts
@@ -13,6 +13,18 @@ export function initUser(sequelize: Sequelize){
             type: DataTypes.STRING,
             allowNull: false
         },
+        firstname: {
+            type: DataTypes.STRING,
+            allowNull: false
+        },
+        lastname: {
+            type: DataTypes.STRING,
+            allowNull: false
+        },
+        email: {
+            type: DataTypes.STRING,
+            allowNull: false
+        },
         type: {
             type: DataTypes.STRING,
             allowNull: false
diff --git a/API/src/database/models/User.ts b/API/src/database/models/User.ts
index d5d8b06..6eeead2 100644
--- a/API/src/database/models/User.ts
+++ b/API/src/database/models/User.ts
@@ -6,6 +6,9 @@ export enum userType{
 }
 export class User extends Model {
     public id!: number;
+    public firstname!: string;
+    public lastname!: string;
+    public email!: string;
     public username!: string;
     public password!: string;
     public type!: string;
diff --git a/API/src/routes/middleware.ts b/API/src/routes/middleware.ts
index 1293137..9ea44d2 100644
--- a/API/src/routes/middleware.ts
+++ b/API/src/routes/middleware.ts
@@ -34,7 +34,7 @@ export async function checkExistingUser(req: express.Request, res: express.Respo
         console.log(`type = ${typeAccount}`);
         console.log({message: typeAccount === 'user' ? `"${id}" => user` : `"${id}" => admin`});
     }else{
-        res.status(StatusCodes.OK).json({message: 'Username not exist'});
+        res.status(StatusCodes.NOT_FOUND).json({message: 'Username not exist'});
     }
 
     next();
@@ -74,16 +74,22 @@ export function checkUsernameField(req: express.Request, res: express.Response,
 
 export function createAccountCheck(req: express.Request, res: express.Response){
     const data=req.body
-    Database.createAccount(data.username, data.password, data.accountType)
+    Database.createAccount(data.username, data.password, data.firstname, data.lastname, data.email, data.accountType)
         .then(result => {
             if(result[0] !== -1){
                 if(result[1] === "User") res.status(StatusCodes.OK).json({new_user: {
                         username: data.username,
-                        password: data.password
+                        password: data.password,
+                        lastname: data.lastname,
+                        firstname: data.firstname,
+                        email: data.email
                     }});
                 if(result[1] === "Admin") res.status(StatusCodes.OK).json({new_admin: {
                         username: data.username,
-                        password: data.password
+                        password: data.password,
+                        lastname: data.lastname,
+                        firstname: data.firstname,
+                        email: data.email
                     }});
             }else{
                 if(result[1] === "Exist"){
diff --git a/API/src/routes/router-admin.ts b/API/src/routes/router-admin.ts
index 35b3156..e47fd00 100644
--- a/API/src/routes/router-admin.ts
+++ b/API/src/routes/router-admin.ts
@@ -86,7 +86,7 @@ router.put('/:admin/update-user-account', checkExistingUser, checkUsernameField,
                 return;
             }
             try{
-                const nbUserUpdated=await Database.updateUserAccount(data.username, data.password, data.accountType);
+                const nbUserUpdated=await Database.updateUserAccount(data.username, data.password, data.firstname, data.lastname, data.email, data.accountType);
                 if(nbUserUpdated){
                     res.status(StatusCodes.OK).json({
                         message: `User ${data.username} updated`
diff --git a/API/src/routes/router-guest.ts b/API/src/routes/router-guest.ts
index d3207a8..a23f51f 100644
--- a/API/src/routes/router-guest.ts
+++ b/API/src/routes/router-guest.ts
@@ -1,6 +1,7 @@
 import express         from 'express';
 import { StatusCodes } from 'http-status-codes';
-import {checkUserFields, createAccountCheck} from './middleware'
+import {checkExistingUser, checkUserFields, createAccountCheck} from './middleware'
+import {Database} from "../database/Database";
 
 
 
@@ -18,5 +19,14 @@ router.post('/create-account', checkUserFields, (req: express.Request, res: expr
     createAccountCheck(req, res);
 });
 
+router.post('/:username', checkExistingUser, async (req: express.Request, res: express.Response) => {
+    const data = req.body
+    if (await Database.checkUserPassword(req.params.username, data.password)) {
+        res.status(StatusCodes.OK).json({message: "User can be authentified"})
+    }else{
+        res.status(StatusCodes.BAD_REQUEST).json({message: "User cannot be authentified"})
+    }
+});
+
 
 export default router;
-- 
GitLab