Browse Source

fix change password cancel button

jrivard@gmail.com 6 years ago
parent
commit
0d038f0aa1

+ 1 - 1
server/src/main/java/password/pwm/http/servlet/changepw/ChangePasswordServlet.java

@@ -88,7 +88,7 @@ public abstract class ChangePasswordServlet extends ControlledPwmServlet
 
     private static final PwmLogger LOGGER = PwmLogger.forClass( ChangePasswordServlet.class );
 
-    private enum ChangePasswordAction implements ControlledPwmServlet.ProcessAction
+    public enum ChangePasswordAction implements ControlledPwmServlet.ProcessAction
     {
         checkProgress( HttpMethod.POST ),
         complete( HttpMethod.GET ),

+ 5 - 5
webapp/src/main/webapp/WEB-INF/jsp/changepassword.jsp

@@ -21,11 +21,11 @@
 --%>
 
 <!DOCTYPE html>
-<%@ page import="password.pwm.bean.PasswordStatus" %>
-<%@ page import="password.pwm.util.macro.MacroMachine" %>
+<%@ page import="password.pwm.PwmConstants" %>
 <%@ page import="password.pwm.http.tag.conditional.PwmIfTest" %>
 <%@ page import="password.pwm.http.tag.value.PwmValue" %>
 <%@ page import="password.pwm.http.PwmRequestAttribute" %>
+<%@ page import="password.pwm.http.servlet.changepw.ChangePasswordServlet" %>
 <%@ page language="java" session="true" isThreadSafe="true" contentType="text/html" %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 <html lang="<pwm:value name="<%=PwmValue.localeCode%>"/>" dir="<pwm:value name="<%=PwmValue.localeDir%>"/>">
@@ -108,12 +108,12 @@
             <input type="hidden" name="pwmFormID" value="<pwm:FormID/>"/>
 
             <div class="buttonbar" style="width:100%">
-                <button type="submit" name="change" class="btn" id="password_button">
+                <button type="submit" name="password_button" class="btn" id="password_button">
                     <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-forward"></span></pwm:if>
                     <pwm:display key="Button_ChangePassword"/>
                 </button>
                 <pwm:if test="<%=PwmIfTest.passwordExpired%>" negate="true">
-                    <button id="button-reset" type="submit" name="change" class="btn" form="form-reset">
+                    <button id="button-reset" type="button" name="button-reset" class="btn" form="form-reset">
                         <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-times"></span></pwm:if>
                         <pwm:display key="Button_Cancel"/>
                     </button>
@@ -121,7 +121,7 @@
             </div>
         </form>
         <form id="form-reset" name="form-reset" action="<pwm:current-url/>" method="post" enctype="application/x-www-form-urlencoded" >
-            <input type="hidden" name="processAction" value="reset"/>
+            <input type="hidden" name="processAction" value="<%=ChangePasswordServlet.ChangePasswordAction.reset%>"/>
             <input type="hidden" name="pwmFormID" value="<pwm:FormID/>"/>
         </form>
     </div>

+ 22 - 22
webapp/src/main/webapp/public/resources/js/changepassword.js

@@ -201,7 +201,6 @@ PWM_CHANGEPW.handleChangePasswordSubmit=function(event) {
         console.log('post change password submit handler');
         if (!data || data['data']['passed'] && 'MATCH' === data['data']['match']) {
             console.log('submitting password form');
-            PWM_VAR['dirtyPageLeaveFlag'] = false;
             PWM_MAIN.getObject("changePasswordForm").submit();
         } else {
             PWM_MAIN.closeWaitDialog();
@@ -348,13 +347,6 @@ PWM_CHANGEPW.fetchRandoms=function(randomConfig) {
 
 PWM_CHANGEPW.startupChangePasswordPage=function() {
 
-    PWM_MAIN.addEventHandler('button-reset', 'click', function(e){
-        console.log('intercepted reset button');
-        PWM_MAIN.cancelEvent(e);
-        var resetForm = PWM_MAIN.getObject('form-reset');
-        PWM_MAIN.handleFormSubmit(resetForm );
-    });
-
     //PWM_MAIN.getObject('password2').disabled = true;
     PWM_CHANGEPW.markStrength(0);
 
@@ -387,22 +379,30 @@ PWM_CHANGEPW.startupChangePasswordPage=function() {
         });
     }
 
-    // add a handler so if the user leaves the page except by submitting the form, then a warning/confirm is shown
-    var pageLeaveFunction = function() {
-        if (PWM_VAR['dirtyPageLeaveFlag']) {
-            var message = PWM_MAIN.showString('Display_LeaveDirtyPasswordPage');
-            console.log('changepassword-beforeunload handler invoked');
-            if (message.trim().length > 0) {
-                return message;
-            }
-        } else {
-            console.log('changepassword-beforeunload handler skipped');
-        }
-    };
-    window.onbeforeunload=pageLeaveFunction;
+    PWM_MAIN.addEventHandler('button-reset','click',function(){
+        console.log('intercepted reset button');
 
+        var p1Value = PWM_MAIN.getObject("password1").value;
+        var p2Value = PWM_MAIN.getObject("password2").value;
 
-    PWM_VAR['dirtyPageLeaveFlag'] = true;
+        var submitForm = function(){
+            var resetForm = PWM_MAIN.getObject('form-reset');
+            PWM_MAIN.handleFormSubmit(resetForm );
+        };
+
+        if ( p1Value.length > 0 || p2Value.length > 0 ) {
+            PWM_MAIN.cancelEvent(event);
+            PWM_MAIN.showConfirmDialog({
+                text:PWM_MAIN.showString('Display_LeaveDirtyPasswordPage'),
+                okLabel:PWM_MAIN.showString('Button_Continue'),
+                okAction:function(){
+                    submitForm();
+                }
+            });
+        } else {
+            submitForm();
+        }
+    });
 
     var messageElement = PWM_MAIN.getObject("message");
     if (messageElement.firstChild.nodeValue.length < 2) {

+ 0 - 3
webapp/src/main/webapp/public/resources/js/main.js

@@ -287,7 +287,6 @@ PWM_MAIN.applyFormAttributes = function() {
                 PWM_MAIN.log('added event handler for submit button with form attribute ' + element.id);
                 PWM_MAIN.addEventHandler(element,'click',function(e){
                     PWM_MAIN.stopEvent(e);
-                    PWM_VAR['dirtyPageLeaveFlag'] = false;
                     var formID = element.getAttribute('form');
                     PWM_MAIN.handleFormSubmit(PWM_MAIN.getObject(formID));
                 });
@@ -337,7 +336,6 @@ PWM_MAIN.addEventHandler = function(nodeId,eventType,functionToAdd) {
 
 
 PWM_MAIN.gotoUrl = function(url, options) {
-    PWM_VAR['dirtyPageLeaveFlag'] = false;
     options = options === undefined ? {} : options;
     if (!('noContext' in options) && url.indexOf(PWM_GLOBAL['url-context']) !== 0) {
         if (url.substring(0,1) === '/') {
@@ -1615,7 +1613,6 @@ PWM_MAIN.IdleTimeoutHandler.pollActivity = function() {
 
     if (secondsRemaining < 0) {
         if (!PWM_GLOBAL['idle_suspendTimeout']) {
-            PWM_VAR['dirtyPageLeaveFlag'] = false;
             PWM_GLOBAL['idle_suspendTimeout'] = true;
             var url = PWM_GLOBAL['url-logout'] + '?idle=true&url=' + encodeURIComponent(window.location.pathname);
             PWM_MAIN.gotoUrl(url);