Controllers_ConnectedUserController.js
const path = require("path");
const ConnectedUserService = require("../Services/ConnectedUserService");
const CrudController = require("./CrudController");
let logger = require("../Logger");
const JsonResponse = require("./JsonResponse");
const crypto = require("crypto");
const resetPasswordValidator = require("../Validators/ResetPasswordValidator");
/**
* @extends Myintranet.Controllers.CrudController
* @memberOf Myintranet.Controllers
* @inheritDoc
*/
class ConnectedUserController extends CrudController {
constructor(db) {
let userService = new ConnectedUserService(db);
super(userService);
this.db = db;
}
/**
* recupére la photo de profile du consultant connecté
* @param request
* @param response
*/
getProfilePicture(request, response) {
if (request.user?.pic && request.user?.pic !="" && request.user?.pic !="null" && request.user?.pic !="NULL") {
response.contentType(request.user.picType);
response.send(Buffer.from(request.user.pic, "binary"));
} else {
response.sendFile(path.resolve("./staticFiles/profile.jpg"));
}
}
/**
* upload la photo de profile de la personne connecté
* @param request
* @param response
*/
uploadProfilePicture(request, response) {
console.log("je suis ici", request.user)
request.user.picType = request.files["pic"].mimetype;
request.user.pic = request.files["pic"].data;
request.user.save()
.then(() => {
response.json({ success: true, data: [], message: "" });
})
.catch((err) => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
});
}
/**
* met a jour l'email ou le mot de passe de l'utilisateur connecté
* @param {*} request
* @param {*} response
*/
update(request, response) {
if (request.body.email && request.body.email !== "") {
let id = request.user.id;
let errors = this.isValidForUpdate(request);
if (errors.length === 0) {
//update email profile
request.user.login = request.body.email;
request.user.save().then(() => {
this.service
.getOne(id, request.user)
.then((element) => {
response.json(new JsonResponse(true, element, ""));
})
.catch((err) => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
});
});
}else {
logger.error(errors[0], errors);
response.json(new JsonResponse(false, errors, errors[0]));
}
}
if (request.body.password && request.body.password !== "") {
let validationResult = resetPasswordValidator.validate(request.body);
if (validationResult.length === 0) {
//need to check old password
let hash = crypto.createHmac("sha512", request.user.salt);
hash.update(request.body.password);
let hasedPassword = hash.digest("hex");
if (hasedPassword === request.user.password) {
let { newPass, confirmPass } = request.body;
if (newPass === confirmPass) {
let ps = this.getPasswordAndSalt(request.body.newPass);
request.user.password = ps.password;
request.user.salt = ps.salt;
request.user.save().then(() => {
this.db.Action.create({
UtilisateurId: request.user.id,
meta: JSON.stringify(request.body),
type: "mise a jour",
text: `<b>${request.user.firstname} ${
request.user.lastname
}</b> a modifié son mot de passe le : ${new Date(
Date.now()
).toLocaleString("fr-FR")}`,
}).then(() => {
this.service
.getOne(request)
.then((element) => {
response.json(new JsonResponse(true, element, ""));
})
.catch((err) => {
logger.error(err.message, err);
response.json(new JsonResponse(false, err, err.message));
});
});
});
} else {
logger.error("Le mot de passe et sa confirmation ne sont pas identiques");
response.json(
new JsonResponse(
false,
"",
"Le mot de passe et sa confirmation ne sont pas identiques"
)
);
}
} else {
logger.error("Ancien mot de passe incorrect, veuillez verifier votre saisie");
response.json(
new JsonResponse(
false,
"",
"Ancien mot de passe incorrect, veuillez verifier votre saisie "
)
);
}
} else {
logger.error(validationResult[0], validationResult);
response.json(
new JsonResponse(
false,
validationResult,
validationResult[0].message
)
);
}
}
}
}
module.exports = ConnectedUserController;