Newer
Older
const bcrypt = require('bcryptjs');
const db = require('../models/db');
exports.signup = (req, res, next) => {
let { username, lastname, firstname, birthdate, password } = req.body;
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, hash, birthdate],
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) => {
db.query('SELECT COUNT(*) c, mdp FROM Utilisateur WHERE login=?', [username], function (error, results, fields) {
if (!error) {
bcrypt.compare(password, results[0].mdp).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 {
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' });
}
}
else {
res.status(500).json({ error });
}
});
};
exports.logout = (req,res,next) => {
req.session.username = null;
res.status(200).json({ message: 'Déconnecté !' });
};
exports.getUserInformations = (req,res,next) => {
let username = req.session.username;
//renvoyer login, nom, prenom, dateNais
db.query('SELECT login,nom,prenom,dateNais FROM Utilisateur WHERE login = ?',
[username],function (error,results,fields) {
if (error) {
res.status(500).json({error});
} else {
let infos = {
username : results[0].login,
lastname : results[0].nom,
firstname : results[0].prenom,
birthdate : results[0].dateNais
};
res.status(200).json(infos);
}
})
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
exports.changeUserInfos = async (req, res, next) => {
try {
const { newUsername, newPassword } = req.params;
const currentUsername = req.session.username; // Supposant que le nom d'utilisateur actuel est stocké dans la session
console.log(req.params);
console.log(req.body);
console.log(newUsername );
if (!newUsername && !newPassword) {
return res.status(400).json({ message: 'Aucune information à mettre à jour' });
}
// Vérification si le nouvel utilisateur existe déjà
if (newUsername) {
const userExists = await checkUserExists(newUsername);
if (userExists) {
return res.status(409).json({ message: 'Le nouvel utilisateur existe déjà' });
}
}
// Mise à jour du nom d'utilisateur et/ou du mot de passe dans la base de données
const updateResult = await updateUserInfo(currentUsername, newUsername, newPassword);
// Vérification si la mise à jour a réussi
if (updateResult) {
req.session.username = newUsername || currentUsername; // Mettre à jour le nom d'utilisateur dans la session si applicable
res.status(200).json({ message: 'Informations utilisateur mises à jour avec succès' });
} else {
res.status(500).json({ message: 'Échec de la mise à jour des informations utilisateur' });
}
} catch (error) {
console.error('Erreur lors de la mise à jour des informations utilisateur :', error);
res.status(500).json({ error });
}
};
// Fonction pour vérifier si un utilisateur existe déjà dans la base de données
async function checkUserExists(username) {
const queryResult = await new Promise((resolve, reject) => {
db.query('SELECT COUNT(*) c FROM Utilisateur WHERE login=?', [username], (error, results, fields) => {
if (error) {
reject(error);
} else {
resolve(results[0].c > 0);
}
});
});
return queryResult;
}
// Fonction pour mettre à jour le nom d'utilisateur et/ou le mot de passe dans la base de données
async function updateUserInfo(currentUsername, newUsername, newPassword) {
const updateResult = await new Promise((resolve, reject) => {
let updateQuery = 'UPDATE Utilisateur SET';
const updateParams = [];
if (newUsername) {
updateQuery += ' login=?,';
updateParams.push(newUsername);
}
if (newPassword) {
updateQuery += ' mdp=?,';
const hash = bcrypt.hashSync(newPassword, 10);
updateParams.push(hash);
}
// Supprimer la virgule finale de la requête
updateQuery = updateQuery.replace(/,$/, '');
// Ajouter la clause WHERE pour le nom d'utilisateur actuel
updateQuery += ' WHERE login=?';
updateParams.push(currentUsername);
// Exécution de la mise à jour
db.query(updateQuery, updateParams, (error, results, fields) => {
if (error) {
reject(error);
} else {
resolve(true);
}
});
});
return updateResult;
}