Przeglądaj źródła

fix issues with client side regex form checking

Jason Rivard 7 lat temu
rodzic
commit
7f59662578

+ 1 - 0
server/src/main/java/password/pwm/AppProperty.java

@@ -52,6 +52,7 @@ public enum AppProperty {
     CLIENT_AJAX_TYPING_WAIT                         ("client.ajax.typingWait"),
     CLIENT_AJAX_TYPING_WAIT                         ("client.ajax.typingWait"),
     CLIENT_FORM_NONCE_ENABLE                        ("client.formNonce.enable"),
     CLIENT_FORM_NONCE_ENABLE                        ("client.formNonce.enable"),
     CLIENT_FORM_NONCE_LENGTH                        ("client.formNonce.length"),
     CLIENT_FORM_NONCE_LENGTH                        ("client.formNonce.length"),
+    CLIENT_FORM_CLIENT_REGEX_ENABLED                ("client.form.clientRegexEnable"),
     CLIENT_WARNING_HEADER_SHOW                      ("client.warningHeader.show"),
     CLIENT_WARNING_HEADER_SHOW                      ("client.warningHeader.show"),
     CLIENT_PW_SHOW_REVERT_TIMEOUT                   ("client.pwShowRevertTimeout"),
     CLIENT_PW_SHOW_REVERT_TIMEOUT                   ("client.pwShowRevertTimeout"),
     CLIENT_JS_ENABLE_HTML5DIALOG                    ("client.js.enableHtml5Dialog"),
     CLIENT_JS_ENABLE_HTML5DIALOG                    ("client.js.enableHtml5Dialog"),

+ 6 - 0
server/src/main/java/password/pwm/config/value/FormValue.java

@@ -30,6 +30,7 @@ import password.pwm.config.PwmSettingSyntax;
 import password.pwm.config.StoredValue;
 import password.pwm.config.StoredValue;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.JsonUtil;
+import password.pwm.util.java.StringUtil;
 import password.pwm.util.secure.PwmSecurityKey;
 import password.pwm.util.secure.PwmSecurityKey;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -156,6 +157,11 @@ public class FormValue extends AbstractValue implements StoredValue {
                 if (formRow.getSelectOptions() != null && !formRow.getSelectOptions().isEmpty()) {
                 if (formRow.getSelectOptions() != null && !formRow.getSelectOptions().isEmpty()) {
                     sb.append(" Select Options: ").append(JsonUtil.serializeMap(formRow.getSelectOptions())).append("\n");
                     sb.append(" Select Options: ").append(JsonUtil.serializeMap(formRow.getSelectOptions())).append("\n");
                 }
                 }
+                if (!StringUtil.isEmpty(formRow.getRegex())) {
+                    sb.append(" Regex:").append(formRow.getRegex())
+                            .append(" Regex Error:").append(JsonUtil.serializeMap(formRow.getRegexErrors()))
+                            .append("\n");
+                }
 
 
             }
             }
             return sb.toString();
             return sb.toString();

+ 1 - 0
server/src/main/java/password/pwm/http/tag/conditional/PwmIfTest.java

@@ -63,6 +63,7 @@ public enum PwmIfTest {
     orgChartEnabled(new OrgChartEnabled()),
     orgChartEnabled(new OrgChartEnabled()),
     passwordExpired(new PasswordExpired()),
     passwordExpired(new PasswordExpired()),
     showMaskedTokenSelection(new BooleanAppPropertyTest(AppProperty.TOKEN_MASK_SHOW_SELECTION)),
     showMaskedTokenSelection(new BooleanAppPropertyTest(AppProperty.TOKEN_MASK_SHOW_SELECTION)),
+    clientFormShowRegexEnabled(new BooleanAppPropertyTest(AppProperty.CLIENT_FORM_CLIENT_REGEX_ENABLED)),
 
 
     accountInfoEnabled(new BooleanPwmSettingTest(PwmSetting.ACCOUNT_INFORMATION_ENABLED)),
     accountInfoEnabled(new BooleanPwmSettingTest(PwmSetting.ACCOUNT_INFORMATION_ENABLED)),
 
 

+ 1 - 0
server/src/main/resources/password/pwm/AppProperty.properties

@@ -44,6 +44,7 @@ client.ajax.typingTimeout=20000
 client.ajax.typingWait=700
 client.ajax.typingWait=700
 client.formNonce.enable=true
 client.formNonce.enable=true
 client.formNonce.length=10
 client.formNonce.length=10
+client.form.clientRegexEnable=true
 client.warningHeader.show=true
 client.warningHeader.show=true
 client.pwShowRevertTimeout=45000
 client.pwShowRevertTimeout=45000
 client.js.enableHtml5Dialog=true
 client.js.enableHtml5Dialog=true

+ 10 - 4
server/src/main/webapp/WEB-INF/jsp/fragment/form.jsp

@@ -15,7 +15,7 @@
 <%@ page import="password.pwm.http.PwmRequestAttribute" %>
 <%@ page import="password.pwm.http.PwmRequestAttribute" %>
 <%@ page import="java.util.Collections" %>
 <%@ page import="java.util.Collections" %>
 <%@ page import="password.pwm.config.CustomLinkConfiguration" %>
 <%@ page import="password.pwm.config.CustomLinkConfiguration" %>
-<%@ page import="org.apache.commons.lang3.StringEscapeUtils" %>
+<%@ page import="password.pwm.http.tag.conditional.PwmIfTest" %>
 
 
 <%--
 <%--
   ~ Password Management Servlets (PWM)
   ~ Password Management Servlets (PWM)
@@ -102,7 +102,9 @@
     <% } else { %>
     <% } else { %>
     <input id="<%=loopConfiguration.getName()%>" type="<%=loopConfiguration.getType()%>" class="inputfield"
     <input id="<%=loopConfiguration.getName()%>" type="<%=loopConfiguration.getType()%>" class="inputfield"
            name="<%=loopConfiguration.getName()%>" value="<%= currentValue %>"
            name="<%=loopConfiguration.getName()%>" value="<%= currentValue %>"
-        <%if (!StringUtil.isEmpty(loopConfiguration.getRegex())) {%> pattern="<%=loopConfiguration.getRegex()%>"<%}%>
+        <pwm:if test="<%=PwmIfTest.clientFormShowRegexEnabled%>">
+            <%if (!StringUtil.isEmpty(loopConfiguration.getRegex())) {%> pattern="<%=loopConfiguration.getRegex()%>"<%}%>
+        </pwm:if>
         <%if(loopConfiguration.getPlaceholder()!=null){%> placeholder="<%=loopConfiguration.getPlaceholder()%>"<%}%>
         <%if(loopConfiguration.getPlaceholder()!=null){%> placeholder="<%=loopConfiguration.getPlaceholder()%>"<%}%>
         <%if(loopConfiguration.isRequired()){%> required="required"<%}%>
         <%if(loopConfiguration.isRequired()){%> required="required"<%}%>
     <pwm:autofocus/> maxlength="<%=loopConfiguration.getMaximumLength()%>">
     <pwm:autofocus/> maxlength="<%=loopConfiguration.getMaximumLength()%>">
@@ -115,7 +117,9 @@
     </label>
     </label>
     <input style="" id="<%=loopConfiguration.getName()%>_confirm" type="<%=loopConfiguration.getType()%>" class="inputfield"
     <input style="" id="<%=loopConfiguration.getName()%>_confirm" type="<%=loopConfiguration.getType()%>" class="inputfield"
            name="<%=loopConfiguration.getName()%>_confirm"
            name="<%=loopConfiguration.getName()%>_confirm"
-            <%if (!StringUtil.isEmpty(loopConfiguration.getRegex())) {%> pattern="<%=loopConfiguration.getRegex()%>"<%}%>
+            <pwm:if test="<%=PwmIfTest.clientFormShowRegexEnabled%>">
+                <%if (!StringUtil.isEmpty(loopConfiguration.getRegex())) {%> pattern="<%=loopConfiguration.getRegex()%>"<%}%>
+            </pwm:if>
             <%if(loopConfiguration.isRequired()){%> required="required"<%}%>
             <%if(loopConfiguration.isRequired()){%> required="required"<%}%>
             <%if(loopConfiguration.isReadonly()){%> readonly="readonly"<%}%>
             <%if(loopConfiguration.isReadonly()){%> readonly="readonly"<%}%>
            maxlength="<%=loopConfiguration.getMaximumLength()%>"/>
            maxlength="<%=loopConfiguration.getMaximumLength()%>"/>
@@ -142,6 +146,7 @@
         </script>
         </script>
     </pwm:script>
     </pwm:script>
     <% } %>
     <% } %>
+    <pwm:if test="<%=PwmIfTest.clientFormShowRegexEnabled%>">
     <% if (loopConfiguration.getRegexError(formLocale) != null && loopConfiguration.getRegexError(formLocale).length() > 0) { %>
     <% if (loopConfiguration.getRegexError(formLocale) != null && loopConfiguration.getRegexError(formLocale).length() > 0) { %>
     <pwm:script>
     <pwm:script>
         <script type="text/javascript">
         <script type="text/javascript">
@@ -150,12 +155,13 @@
                     event.target.setCustomValidity("");
                     event.target.setCustomValidity("");
                 });
                 });
                 PWM_MAIN.addEventHandler('<%=loopConfiguration.getName()%>', 'invalid', function (event) {
                 PWM_MAIN.addEventHandler('<%=loopConfiguration.getName()%>', 'invalid', function (event) {
-                    event.target.setCustomValidity('<%=StringEscapeUtils.escapeEcmaScript(loopConfiguration.getRegexError(formLocale))%>');
+                    event.target.setCustomValidity('<%=StringUtil.escapeJS(loopConfiguration.getRegexError(formLocale))%>');
                 });
                 });
             });
             });
         </script>
         </script>
     </pwm:script>
     </pwm:script>
     <% } %>
     <% } %>
+    </pwm:if>
     <pwm:script>
     <pwm:script>
         <script type="text/javascript">
         <script type="text/javascript">
             PWM_GLOBAL['startupFunctions'].push(function(){
             PWM_GLOBAL['startupFunctions'].push(function(){