mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2024-12-27 09:21:59 -06:00
050431c4dd
- bounce url param was renamed from 'redirect' to 'url' - support for 'delay' param added Behavior: - "Continue to next page" link is shown if 'url' is present - page is no longer automatically redirected if 'url' is present - automatic redirect is controlled by 'delay' param - it specifies number of seconds until redirection - info message 'You will be redirected in Xs' is show to notify the user that something will happen. It's useful even if delay is 0 or negative because redirection might be slow. - counter is decremented every second - delay is ignored if parsed as NaN https://fedorahosted.org/freeipa/ticket/4440 Reviewed-By: Endi Sukma Dewata <edewata@redhat.com>
221 lines
5.7 KiB
JavaScript
221 lines
5.7 KiB
JavaScript
/* Authors:
|
|
* Petr Vobornik <pvoborni@redhat.com>
|
|
*
|
|
* Copyright (C) 2010 Red Hat
|
|
* see file 'COPYING' for use and warranty information
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
var RP = {}; //Reset Password Page
|
|
|
|
RP.reset_password = function(username, old_password, new_password, otp) {
|
|
|
|
//possible results: 'ok', 'invalid-password', 'policy-error'
|
|
|
|
var status, result, reason, invalid, failure, data, request;
|
|
|
|
status = 'invalid';
|
|
result = {
|
|
status: status,
|
|
message: "Password reset was not successful."
|
|
};
|
|
|
|
function success_handler(data, text_status, xhr) {
|
|
|
|
result.status = xhr.getResponseHeader("X-IPA-Pwchange-Result") || status;
|
|
|
|
if (result.status === 'policy-error') {
|
|
result.message = xhr.getResponseHeader("X-IPA-Pwchange-Policy-Error");
|
|
} else if (result.status === 'invalid-password') {
|
|
result.message = "The password or username you entered is incorrect.";
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
function error_handler(xhr, text_status, error_thrown) {
|
|
return result;
|
|
}
|
|
|
|
data = {
|
|
user: username,
|
|
old_password: old_password,
|
|
new_password: new_password
|
|
};
|
|
|
|
if (otp) {
|
|
data.otp = otp;
|
|
}
|
|
|
|
request = {
|
|
url: '/ipa/session/change_password',
|
|
data: data,
|
|
contentType: 'application/x-www-form-urlencoded',
|
|
processData: true,
|
|
dataType: 'html',
|
|
async: false,
|
|
type: 'POST',
|
|
success: success_handler,
|
|
error: error_handler
|
|
};
|
|
|
|
$.ajax(request);
|
|
|
|
return result;
|
|
};
|
|
|
|
RP.verify_required = function(field, value) {
|
|
|
|
var valid = true;
|
|
|
|
if (!value || value === '') {
|
|
valid = false;
|
|
RP.show_error(field +" is required");
|
|
}
|
|
|
|
return valid;
|
|
};
|
|
|
|
|
|
RP.on_submit = function() {
|
|
|
|
var username = $('#user').val();
|
|
var current_password = $('#old_password').val();
|
|
var otp = $('#otp').val();
|
|
var new_password = $('#new_password').val();
|
|
var verify_password = $('#verify_password').val();
|
|
|
|
if (!RP.verify_required('Username', username)) return;
|
|
if (!RP.verify_required('Current Password', current_password)) return;
|
|
if (!RP.verify_required('New Password', new_password)) return;
|
|
if (!RP.verify_required('Verify Password', verify_password)) return;
|
|
|
|
if (new_password !== verify_password) {
|
|
RP.show_error("Passwords must match");
|
|
return;
|
|
}
|
|
|
|
var result = RP.reset_password(username, current_password, new_password, otp);
|
|
|
|
if (result.status !== 'ok') {
|
|
RP.show_error(result.message);
|
|
} else {
|
|
RP.reset_form();
|
|
RP.show_success("Password reset was successful.");
|
|
RP.redirect();
|
|
}
|
|
};
|
|
|
|
RP.reset_form = function() {
|
|
$('.alert-danger').css('display', 'none');
|
|
$('.alert-success').css('display', 'none');
|
|
$('#old_password').val('');
|
|
$('#otp').val('');
|
|
$('#new_password').val('');
|
|
$('#verify_password').val('');
|
|
};
|
|
|
|
RP.show_error = function(message) {
|
|
|
|
$('.alert-danger > p').text(message);
|
|
$('.alert-danger').css('display', '');
|
|
$('.alert-success').css('display', 'none');
|
|
};
|
|
|
|
RP.show_info = function(message) {
|
|
|
|
$('.alert-info > p').text(message || '');
|
|
if (!message) {
|
|
$('.alert-info').css('display', 'none');
|
|
} else {
|
|
$('.alert-info').css('display', '');
|
|
}
|
|
};
|
|
|
|
RP.show_success = function(message) {
|
|
|
|
$('.alert-success > p').text(message);
|
|
$('.alert-danger').css('display', 'none');
|
|
$('.alert-success').css('display', '');
|
|
};
|
|
|
|
RP.parse_uri = function() {
|
|
var opts = {};
|
|
if (window.location.search.length > 1) {
|
|
var couples = window.location.search.substr(1).split("&");
|
|
for (var i=0,l=couples.length; i < l; i++) {
|
|
var couple = couples[i].split("=");
|
|
var key = decodeURIComponent(couple[0]);
|
|
var value = couple.length > 1 ? decodeURIComponent(couple[1]) : '';
|
|
opts[key] = value;
|
|
}
|
|
}
|
|
return opts;
|
|
};
|
|
|
|
RP.redirect = function() {
|
|
|
|
var opts = RP.parse_uri();
|
|
var url = opts['url'];
|
|
var delay = parseInt(opts['delay'], 10);
|
|
|
|
var msg_cont = $('.alert-success > p');
|
|
$('.redirect', msg_cont).remove();
|
|
|
|
// button for manual redirection
|
|
if (url) {
|
|
var redir_cont = $('<span/>', { 'class': 'redirect' }).
|
|
append(' ').
|
|
append($('<a/>', {
|
|
href: url,
|
|
text: 'Continue to next page'
|
|
})).
|
|
appendTo(msg_cont);
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
if (delay <= 0 || delay > 0) { // NaN check
|
|
RP.redir_url = url;
|
|
RP.redir_delay = delay;
|
|
RP.redir_count_down();
|
|
}
|
|
};
|
|
|
|
RP.redir_count_down = function() {
|
|
|
|
RP.show_info("You will be redirected in " + Math.max(RP.redir_delay, 0) + "s");
|
|
if (RP.redir_delay <= 0) {
|
|
window.location = RP.redir_url;
|
|
return;
|
|
}
|
|
window.setTimeout(RP.redir_count_down, 1000);
|
|
RP.redir_delay--;
|
|
};
|
|
|
|
|
|
RP.init = function() {
|
|
|
|
$('#reset_password').submit(function() {
|
|
RP.on_submit();
|
|
return false;
|
|
});
|
|
};
|
|
|
|
/* main (document onready event handler) */
|
|
$(function() {
|
|
RP.init();
|
|
});
|