From 1eab43d29244f6e0b8d6f3146317624715d84af7 Mon Sep 17 00:00:00 2001 From: Petr Vobornik Date: Fri, 8 Jun 2012 16:38:17 +0200 Subject: Separate reset password page This patch adds separate reset password page. It is a complement to separate login page. It differentiate from reset password capabilities in Web UI's anauthorized dialog by not performing login. This is useful for users who wants only to reset the password and not to use Web UI. And also for users who are using the separate login page. https://fedorahosted.org/freeipa/ticket/2755 --- install/ui/Makefile.am | 2 + install/ui/ipa.css | 15 +++- install/ui/jsl.conf | 1 + install/ui/login.html | 3 +- install/ui/reset_password.html | 66 +++++++++++++++++ install/ui/reset_password.js | 163 +++++++++++++++++++++++++++++++++++++++++ 6 files changed, 247 insertions(+), 3 deletions(-) create mode 100644 install/ui/reset_password.html create mode 100644 install/ui/reset_password.js (limited to 'install/ui') diff --git a/install/ui/Makefile.am b/install/ui/Makefile.am index e4256de91..ea3a20295 100644 --- a/install/ui/Makefile.am +++ b/install/ui/Makefile.am @@ -53,6 +53,8 @@ app_DATA = \ overpass_regular-web.ttf \ overpass_regular-web.woff \ policy.js \ + reset_password.js \ + reset_password.html \ rule.js \ search.js \ selinux.js \ diff --git a/install/ui/ipa.css b/install/ui/ipa.css index c69fc80de..2ce8494ab 100644 --- a/install/ui/ipa.css +++ b/install/ui/ipa.css @@ -1569,6 +1569,10 @@ span.sshkey-status, a.sshkey-set { width: 450px; } +.form-box { + padding: 1em 2em; +} + #error-box, .error-box { -moz-border-radius: 0.3em 0.3em 0.3em 0.3em; -webkit-border-radius: 0.3em 0.3em 0.3em 0.3em; @@ -1578,6 +1582,15 @@ span.sshkey-status, a.sshkey-set { padding: 1em 2em; } +#success-box, .success-box { + -moz-border-radius: 0.3em 0.3em 0.3em 0.3em; + -webkit-border-radius: 0.3em 0.3em 0.3em 0.3em; + background-color: #FFEB80; + border: 1px solid #FFDE2E; + margin: 0 2em 1em 2em; + padding: 1em 2em; +} + #formwindow h2 { background-color: #F0F0F0; font-size: 1.6em; @@ -1619,7 +1632,7 @@ span.sshkey-status, a.sshkey-set { box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); margin-left: 15px; padding: 2px 10px; - width: 248px; + width: 210px; } #login li label, #modal li label { diff --git a/install/ui/jsl.conf b/install/ui/jsl.conf index 3eebda4e8..97789b2f0 100644 --- a/install/ui/jsl.conf +++ b/install/ui/jsl.conf @@ -159,3 +159,4 @@ +process automember.js +process webui.js +process login.js ++process reset_password.js diff --git a/install/ui/login.html b/install/ui/login.html index 9902466a7..69e3dea7f 100644 --- a/install/ui/login.html +++ b/install/ui/login.html @@ -30,7 +30,7 @@ @@ -52,7 +52,6 @@ - diff --git a/install/ui/reset_password.html b/install/ui/reset_password.html new file mode 100644 index 000000000..423d8e8b2 --- /dev/null +++ b/install/ui/reset_password.html @@ -0,0 +1,66 @@ + + + + + IPA: Identity Policy Audit + + + + + + + + + + +
+ + + +
+

Reset password

+ + + + + +
+
    +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
  • + + +
  • +
+ +
+ +
+
+ +
+
+ + + + diff --git a/install/ui/reset_password.js b/install/ui/reset_password.js new file mode 100644 index 000000000..5d828afac --- /dev/null +++ b/install/ui/reset_password.js @@ -0,0 +1,163 @@ +/* Authors: + * Petr Vobornik + * + * 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 . +*/ + +var RP = {}; //Reset Password Page + +RP.reset_password = function(username, old_password, new_password) { + + //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 + }; + + 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 = $('#username').val(); + var current_password = $('#password').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); + + if (result.status !== 'ok') { + RP.show_error(result.message); + } else { + RP.reset_form(); + $('#success').css('display', 'block'); + $('#login-link').focus(); + RP.hide_reset_form(); + } +}; + +RP.reset_form = function() { + $('#invalid').css('display', 'none'); + $('#success').css('display', 'none'); + $('#password').val(''); + $('#new_password').val(''); + $('#verify_password').val(''); +}; + +RP.show_error = function(message) { + + $('#error-msg').text(message); + $('#invalid').css('display', 'block'); + $('#success').css('display', 'none'); +}; + +RP.hide_reset_form = function() { + + RP.form.hide(); + RP.reset_link.show(); +}; + +RP.show_reset_form = function() { + + RP.reset_form(); + RP.form.show(); + RP.reset_link.hide(); +}; + +RP.init = function() { + + RP.form = $('#login'); + RP.reset_link = $('#reset_pwd_link'); + RP.reset_link.click(function() { + RP.show_reset_form(); + return false; + }); + + $('input[name=submit]', RP.form).click(function() { + RP.on_submit(); + return false; + }); +}; + +/* main (document onready event handler) */ +$(function() { + RP.init(); +}); -- cgit