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;