ComunicWeb/assets/js/pages/passwordForgotten/promptSecurityQuestions.js
2018-05-26 07:30:02 +02:00

137 lines
3.2 KiB
JavaScript

/**
* Prompt user security questions
*
* Password reset page
*
* @author Pierre HUBERT
*/
ComunicWeb.pages.passwordForgotten.promptSecurityQuestions = {
/**
* Prompt user security questions
*
* @param {String} email The email of the user
* @param {HTMLElement} target The target for the form
*/
open: function(email, target){
//Show loading message
target.appendChild(ComunicWeb.common.messages.createCalloutElem(
"Please wait",
"Please wait, we are loading your security questions...",
"info"));
//Perform a request on the API
ComunicWeb.components.account.interface.getSecurityQuestions(email, function(callback){
//Empty target
emptyElem(target);
//Check for errors
if(callback.error){
return target.appendChild(ComunicWeb.common.messages.createCalloutElem(
"Error",
"An error occurred while retrieving your security questions...",
"danger"));
}
//Apply the form
ComunicWeb.pages.passwordForgotten.promptSecurityQuestions._display_form(email, callback.questions, target);
});
},
/**
* Display the security questions input form
*
* @param {String} email The email address of the user
* @param {Array} questions The questions of the user
* @param {HTMLElement} target The target for the form
*/
_display_form: function(email, questions, target){
//Create form target
var form = createElem2({
appendTo: target,
type: "div"
});
//Add messages target
var messagesTarget = createElem2({
appendTo: form,
type: "div"
});
//Add notice
add_p(form, "Please answer your security questions now, in order to reset your password.");
add_p(form, "Do not worry about lowercase and uppercase letters.");
//Process the questions
var inputs = [];
questions.forEach(function(question){
//Create the input
var input = createFormGroup({
target: form,
label: question,
placeholder: "Your answer to the question",
type: "text"
});
inputs.push(input);
});
//Add submit button
var submit = createElem2({
appendTo: form,
type: "div",
class: "btn btn-primary",
innerHTML: "Submit"
});
//Make submit button lives
submit.addEventListener("click", function(e){
//Check if another request is already pending
if(submit.disabled) return;
//Check the inputs
var answers = [];
inputs.forEach(function(input){
answers.push(input.value);
});
//Send a request to the server
submit.disabled = true;
//Add loading message
emptyElem(messagesTarget);
messagesTarget.appendChild(ComunicWeb.common.messages.createCalloutElem(
"Loading",
"Please wait while we are checking your security answers...",
"info"));
ComunicWeb.components.account.interface.resetPasswordWithSecurityAnswers(email, answers, function(result){
submit.disabled = false;
emptyElem(messagesTarget);
//Check for errors
if(result.error){
messagesTarget.appendChild(ComunicWeb.common.messages.createCalloutElem(
"Error",
"The server rejected your security answers, please check them...",
"danger"
));
return;
}
//Redirect to reset page
openPage("reset_password?token=#" + result.reset_token);
});
});
},
}