mirror of
				https://scm.univ-tours.fr/22107988t/rappaurio-sae501_502.git
				synced 2025-11-04 11:45:22 +01:00 
			
		
		
		
	changed the whole structure
This commit is contained in:
		
							
								
								
									
										162
									
								
								app-rappaurio/server/controllers/auth.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								app-rappaurio/server/controllers/auth.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,162 @@
 | 
			
		||||
const mysql = require('mysql');
 | 
			
		||||
const jwt = require('jsonwebtoken');
 | 
			
		||||
const bcrypt = require('bcryptjs');
 | 
			
		||||
const { promisify } = require('util');
 | 
			
		||||
 | 
			
		||||
const db = mysql.createConnection({
 | 
			
		||||
    host: process.env.DATABASE_HOST,
 | 
			
		||||
    user: process.env.DATABASE_USER,
 | 
			
		||||
    password: process.env.DATABASE_PASSWORD,
 | 
			
		||||
    database: process.env.DATABASE
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
exports.login = async (req, res) => {
 | 
			
		||||
    try {
 | 
			
		||||
        const { email, password } = req.body;
 | 
			
		||||
        if (!email || !password) {
 | 
			
		||||
            return res.status(400).render('contains/connexion', {
 | 
			
		||||
                message: 'Veuillez entrer un email et un mot de passe'
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        db.query('SELECT * FROM users WHERE email = ?', [email], async (error, result) => {
 | 
			
		||||
            console.log(result)
 | 
			
		||||
            if (!result || result.length == 0 || !(await bcrypt.compare(password, result[0].password))) {
 | 
			
		||||
                res.status(401).render('contains/connexion', {
 | 
			
		||||
                    message: 'Email ou Mot de passe incorrect'
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                const id = result[0].id;
 | 
			
		||||
                // creating a token
 | 
			
		||||
                const token = jwt.sign({ id: id }, process.env.JWT_SECRET, {
 | 
			
		||||
                    expiresIn: process.env.JWT_EXPIRES_IN
 | 
			
		||||
                });
 | 
			
		||||
 | 
			
		||||
                console.log("The token is : " + token);
 | 
			
		||||
 | 
			
		||||
                // when does our token expires
 | 
			
		||||
                const cookieOptions = {
 | 
			
		||||
                    expires: new Date(
 | 
			
		||||
                        Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
 | 
			
		||||
                    ),
 | 
			
		||||
                    // just to prevent if someone is not messing with our cookies 
 | 
			
		||||
                    httpOnly: true
 | 
			
		||||
                }
 | 
			
		||||
                // we can use any name here in res.cookie(name , token , cookieoptions ) ;
 | 
			
		||||
                // after a user is loged in we put cookie in browser
 | 
			
		||||
                res.cookie('jwt', token, cookieOptions);
 | 
			
		||||
                res.status(200).redirect('/');
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
        console.log(error);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.register = (req, res) => {
 | 
			
		||||
    console.log(req.body);
 | 
			
		||||
 | 
			
		||||
    // de-structuring in javaScript....
 | 
			
		||||
    const { name, email, password } = req.body;
 | 
			
		||||
 | 
			
		||||
    db.query('SELECT email FROM  users WHERE email = ?', [email], async (error, result) => {
 | 
			
		||||
        if (error) {
 | 
			
		||||
            console.log(error);
 | 
			
		||||
        }
 | 
			
		||||
        if (result.length > 0) {
 | 
			
		||||
            return res.render('contains/inscription', {
 | 
			
		||||
                message: 'Cet email est déjà utilisé'
 | 
			
		||||
            })
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        let hashedPassword = await bcrypt.hash(password, 8);
 | 
			
		||||
 | 
			
		||||
        console.log(hashedPassword);
 | 
			
		||||
 | 
			
		||||
        db.query('INSERT INTO users SET ?', { name: name, email: email, password: hashedPassword }, (error, result) => {
 | 
			
		||||
            if (error) {
 | 
			
		||||
                console.log(error);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                console.log(result);
 | 
			
		||||
 | 
			
		||||
                db.query('SELECT * FROM users WHERE email = ?', [email], async (error, result) => {
 | 
			
		||||
                    console.log(result)
 | 
			
		||||
 | 
			
		||||
                    const id = result[0].id;
 | 
			
		||||
                    // creating a token
 | 
			
		||||
                    const token = jwt.sign({ id: id }, process.env.JWT_SECRET, {
 | 
			
		||||
                        expiresIn: process.env.JWT_EXPIRES_IN
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                    console.log("The token is : " + token);
 | 
			
		||||
 | 
			
		||||
                    // when does our token expires
 | 
			
		||||
                    const cookieOptions = {
 | 
			
		||||
                        expires: new Date(
 | 
			
		||||
                            Date.now() + process.env.JWT_COOKIE_EXPIRES_IN * 24 * 60 * 60 * 1000
 | 
			
		||||
                        ),
 | 
			
		||||
                        // just to prevent if someone is not messing with our cookies 
 | 
			
		||||
                        httpOnly: true
 | 
			
		||||
                    }
 | 
			
		||||
                    // we can use any name here in res.cookie(name , token , cookieoptions ) ;
 | 
			
		||||
                    // after a user is loged in we put cookie in browser
 | 
			
		||||
                    res.cookie('jwt', token, cookieOptions);
 | 
			
		||||
                    res.status(200).redirect('/');
 | 
			
		||||
 | 
			
		||||
                })
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
exports.isLoggedIn = async (req, res, next) => {
 | 
			
		||||
 | 
			
		||||
    console.log(req.cookies);
 | 
			
		||||
    if (req.cookies.jwt) {
 | 
			
		||||
        try {
 | 
			
		||||
            // step 1 : Verify the token
 | 
			
		||||
            const decoded = await promisify(jwt.verify)(
 | 
			
		||||
                req.cookies.jwt,
 | 
			
		||||
                process.env.JWT_SECRET
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            //console.log(decoded);
 | 
			
		||||
 | 
			
		||||
            const userId = decoded.id;
 | 
			
		||||
            req.userId = userId;
 | 
			
		||||
 | 
			
		||||
            // step 2: check if the user still exists 
 | 
			
		||||
            db.query('SELECT * FROM users WHERE id = ?', [decoded.id], (error, result) => {
 | 
			
		||||
                console.log(result);
 | 
			
		||||
 | 
			
		||||
                if (!result) {
 | 
			
		||||
                    return next();
 | 
			
		||||
                }
 | 
			
		||||
                req.user = result[0];
 | 
			
		||||
                return next();
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            console.log(error);
 | 
			
		||||
            return next();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        next();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
exports.logout = async (req, res) => {
 | 
			
		||||
    res.cookie('jwt', 'déconnecté', {
 | 
			
		||||
        expires: new Date(Date.now() + 2 * 1000),
 | 
			
		||||
        httpOnly: true
 | 
			
		||||
    });
 | 
			
		||||
    res.status(200).redirect('/');
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								app-rappaurio/server/controllers/historiqueController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								app-rappaurio/server/controllers/historiqueController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
const mysql = require('mysql');
 | 
			
		||||
 | 
			
		||||
// Créez une connexion à la base de données
 | 
			
		||||
const db = mysql.createConnection({
 | 
			
		||||
    host: process.env.DATABASE_HOST,
 | 
			
		||||
    user: process.env.DATABASE_USER,
 | 
			
		||||
    password: process.env.DATABASE_PASSWORD,
 | 
			
		||||
    database: process.env.DATABASE
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Fonction pour récupérer les données depuis la base de données
 | 
			
		||||
exports.getHistoriqueData = (userId, callback) => {
 | 
			
		||||
    db.query('SELECT * FROM search WHERE id = ? LIMIT 50', [userId], (error, results) => {
 | 
			
		||||
        if (error) {
 | 
			
		||||
            console.error('Erreur lors de la récupération des données depuis la base de données :', error);
 | 
			
		||||
            callback(error, null);
 | 
			
		||||
        } else {
 | 
			
		||||
            callback(null, results);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										27
									
								
								app-rappaurio/server/controllers/searchController.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								app-rappaurio/server/controllers/searchController.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
// searchController.js
 | 
			
		||||
 | 
			
		||||
const mysql = require('mysql');
 | 
			
		||||
 | 
			
		||||
// Créez une connexion à la base de données
 | 
			
		||||
const db = mysql.createConnection({
 | 
			
		||||
    host: process.env.DATABASE_HOST,
 | 
			
		||||
    user: process.env.DATABASE_USER,
 | 
			
		||||
    password: process.env.DATABASE_PASSWORD,
 | 
			
		||||
    database: process.env.DATABASE
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Fonction pour insérer les données de recherche dans la base de données
 | 
			
		||||
exports.insertSearchData = (userId, articleTitle1, articleTitle2, callback) => {
 | 
			
		||||
    db.query('INSERT INTO search (id, article1, article2) VALUES (?, ?, ?)', [userId, articleTitle1, articleTitle2], (error, result) => {
 | 
			
		||||
        if (error) {
 | 
			
		||||
            console.error('Erreur lors de l\'insertion des données dans la base de données :', error);
 | 
			
		||||
            // Vous pouvez gérer l'erreur en appelant le callback avec l'erreur
 | 
			
		||||
            callback(error, null);
 | 
			
		||||
        } else {
 | 
			
		||||
            // Les données ont été insérées avec succès
 | 
			
		||||
            console.log('Données insérées avec succès dans la base de données.');
 | 
			
		||||
            // Appelez le callback avec succès
 | 
			
		||||
            callback(null, result);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
		Reference in New Issue
	
	Block a user