mirror of
https://github.com/pierre42100/ComunicWeb
synced 2024-11-23 12:39:22 +00:00
137 lines
3.2 KiB
JavaScript
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);
|
|
|
|
});
|
|
});
|
|
},
|
|
} |