const bcrypt = require('bcryptjs'); const db = require('../models/db'); const crypto = require('node:crypto'); exports.signup = (req, res, next) => { let username = req.body.username; let lastname = req.body.lastname; let firstname = req.body.firstname; let birthdate = req.body.birthdate; let password = req.body.password; const hash = bcrypt.hash(password, 10); hash.then( hash => { //enregistrer les infos de l'utilisateur et le hash du mdp en base de données db.query('INSERT INTO Utilisateur VALUES(?,?,?,?,?)', [username, lastname, firstname, birthdate, hash], function (error, results, fields) { if (error == null) { res.status(201).json({ message: 'Utilisateur ajouté' }); } else { res.status(500).json({ error }); } }) } ) .catch(error => res.status(500).json({ error })) }; exports.login = (req, res, next) => { let username = req.body.username; let password = req.body.password; db.query('SELECT COUNT(*) c, mot_de_passe FROM Utilisateur WHERE nom_utilisateur=?', [username], function (error, results, fields) { if (error == null) { if (results[0].c == 1) { bcrypt.compare(password, results[0].mot_de_passe).then( valid => { if (!valid) { return res.status(401).json({ message: 'Identifiant ou mot de passe incorrect' }); // Le mot de passe donné ne corresponds pas à celui dans la bdd } else { let sessionId = crypto.randomUUID(); db.query('INSERT INTO Session VALUES (?,?)', [sessionId, username]); res.cookie('sessionId', sessionId); res.status(200).json({ message: 'Connecté !' }); } } ) .catch(error => { res.status(500).json({ error }) }); } else { //pas d'utilisateur trouvé avec ce username res.status(401).json({ message: 'Identifiant ou mot de passe incorrect BV' }); } } else { res.status(500).json({ error }); } }); }; /** * Cette fonction Récupere les films d'un auteur. * * @param {string} author - L'auteur cherché. * @param {boolean} isOrdered - Faut il trier la liste. * @param {int} length - La taille de la liste (-1 = max). * @returns {Movie[]} - La liste des films en type Film. */ function getMoviesByAuthor(author, isOrdered = false, length = -1){ res = db.query('Select f.tconst, f.primaryTitle, f.isAdult, f.startYear, f.runtimeMinutes, f.averageRating, f.numVotes, f.titleFR From Film f join Role r on f.tconst = r.tconst where r.nconst = ?', [author]); return Movie.toMovie(res); } /** * Cette fonction Récupere les films d'un Style. * * @param {int} style - Le style cherché. * @param {boolean} isOrdered - Faut il trier la liste. * @param {int} length - La taille de la liste (-1 = max). * @returns {Movie[]} - La liste des films en type Film. */ function getMoviesByStyle(style, isOrdered = false, length = -1){ res = db.query('Select f.tconst, f.primaryTitle, f.isAdult, f.startYear, f.runtimeMinutes, f.averageRating, f.numVotes, f.titleFR From Film f joingenreFilm gf on f.tconst = gf.tconst where gf.idgen = ?', [style]); return Movie.toMovie(res); } /** * Cette fonction récupere un utilisateur avec son login. * * @param {string} login - login de l'utilisateur. * @returns {User} - L'utilisateur. */ function get_user(login){ res = db.query('Select Unique * From Utilisateur where login = ?', [login]); return User.toUser(res); }