Controllers_SecuredLinkController.js

const UserService = require("../Services/UserService");
const CrudController = require("./CrudController");
const JsonResponse = require('./JsonResponse');

/**
 * @extends Myintranet.Controllers.CrudController
 * @memberOf Myintranet.Controllers
 * @inheritDoc
 */
class SecuredLinkController extends CrudController {

    constructor(db) {
        let userService = new UserService(db);
        super(userService);
        this.db = db;
    }


    completeProfile(request, response) {
        this.db.User.findOne({
            include: [{
                model: this.db.SecuredLink,
                where: {token: request.params.id}
            }]
        }).then(user => {
            if (!user) {
                response.redirect('/Perime/' + request.params.id);
            } else {
                response.redirect('/completeProfile/' + request.params.id);
            }
        });
    }

    SaisiePrev(request, response) {
        this.db.User.findOne({
            include: [{
                model: this.db.SecuredLink,
                where: {token: request.params.id}
            }]
        }).then(user => {
            if (!user) {
                response.redirect('/Perime/' + request.params.id);
            } else {
                response.redirect('/Prev/' + request.params.id);
            }
        });
    }


    SaisieCra(request, response) {
        this.db.User.findOne({
            include: [{
                model: this.db.SecuredLink,
                where: {token: request.params.id}
            }]
        }).then(user => {
            if (!user) {
                response.redirect('/Perime/' + request.params.id);
            } else {
                response.redirect('/cra/' + request.params.id);
            }
        });
    }

    /**
     *
     * @param request
     * @param response
     * @constructor
     */
    SaisieCraEtPrev(request, response) {
        this.db.User.findOne({
            include: [{
                model: this.db.SecuredLink,
                where: {token: request.params.id}
            }]
        }).then(user => {
            if (!user) {
                response.redirect('/Perime/' + request.params.id)
            } else {
                response.redirect('/Cra/' + request.params.id)

            }
        });
    }

    /**
     *
     * @param request
     * @param response
     */
    async getSecuredLinkConsultant(request, response) {

        let link = await this.db.SecuredLink.findOne({
            where: {token: request.params.id},
            include: {
                model: this.db.Mission,
                include: [{
                    model: this.db.PrevHistory
                }, {
                    model: this.db.CraHistory
                }, this.db.Employeur, this.db.Client, {
                    model: this.db.Consultant,
                    include: this.db.User
                }]
            }
        });
        if (!link) { 
            //TODO: add the roules to invalid link
            response.json(new JsonResponse(false, null, "Link Not found"))

        } else {
            // link is valid
            response.json(new JsonResponse(true, link, "Link found with id : "+link.id))

        }

    }



    saveSecuredLinkConsultant(request, response) {

        this.db.User.findOne({
            include: [{
                model: this.db.SecuredLink,
                where: {token: request.params.id}
            }]
        }).then(user => {
            if (!user) {
                response.json(new JsonResponse(false, {}, "User not found "))
            } else {
                let passsalt = this.getPasswordAndSalt(request.body.password)
                user.password = passsalt.password;
                user.salt = passsalt.salt;
                user.tmpAccessKey = null;
                user.save().then(() => {
                    response.json(new JsonResponse(true, user, "User Saved"))
                })
            }
        });

    }


    /**
     *
     * @param request
     * @param response
     * @constructor
     */
    getResetpasswordPage(request, response) {
        this.db.User.findOne({
            include: [{
                model: this.db.SecuredLink,
                where: {token: request.params.id}
            }]
        }).then(user => {
            if (!user) {
                response.redirect('/resetPassPerime/' + request.params.id)
            } else {
                console.log(user)
                response.redirect('/resetpass/' + request.params.id)

            }
        });
    }
}


module.exports = SecuredLinkController;