[4/4] struts git commit: Optimises validator to reduce number of compiling pattern

2016-11-15 Thread lukaszlenart
Optimises validator to reduce number of compiling pattern


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/931df54a
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/931df54a
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/931df54a

Branch: refs/heads/master
Commit: 931df54ab379bf4eb5a625bf05066b8563c3737b
Parents: eb71d88
Author: Lukasz Lenart 
Authored: Wed Nov 16 07:46:29 2016 +0100
Committer: Lukasz Lenart 
Committed: Wed Nov 16 07:46:29 2016 +0100

--
 .../validator/validators/URLValidator.java  | 61 
 1 file changed, 38 insertions(+), 23 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/931df54a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
--
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
index 8786c18..f12c286 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
@@ -17,6 +17,8 @@ package com.opensymphony.xwork2.validator.validators;
 
 import com.opensymphony.xwork2.validator.ValidationException;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import java.util.regex.Pattern;
 
@@ -42,8 +44,25 @@ import java.util.regex.Pattern;
  */
 public class URLValidator extends FieldValidatorSupport {
 
-private String urlRegex;
+private static final Logger LOG = LogManager.getLogger(URLValidator.class);
+
+public static final String DEFAULT_URL_REGEX = "^(https?|ftp):\\/\\/" +
+"(([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+" +
+"(:([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+)?" +
+"@)?(#?" +
+")((([a-z0-9]\\.|[a-z0-9][a-z0-9-]*[a-z0-9]\\.)*" +
+"[a-z][a-z0-9-]*[a-z0-9]" +
+"|((\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])\\.){3}" +
+"(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])" +
+")(:\\d+)?" +
+
")(((\\/{0,1}([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)*" +
+"(\\?([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)" +
+"?)?)?" +
+"(#([a-z0-9$_\\.\\+!\\*\\'\\(\\),;:@&=-]|%[0-9a-f]{2})*)?" +
+"$";
+
 private String urlRegexExpression;
+private Pattern urlPattern = Pattern.compile(DEFAULT_URL_REGEX, 
Pattern.CASE_INSENSITIVE);
 
 public void validate(Object object) throws ValidationException {
 String fieldName = getFieldName();
@@ -55,11 +74,26 @@ public class URLValidator extends FieldValidatorSupport {
 return;
 }
 
-if (!(value.getClass().equals(String.class)) || 
!Pattern.compile(getUrlRegex(), 
Pattern.CASE_INSENSITIVE).matcher(String.valueOf(value).trim()).matches()) {
+String stringValue = String.valueOf(value).trim();
+
+if (!(value.getClass().equals(String.class)) || 
!getUrlPattern().matcher(stringValue).matches()) {
 addFieldError(fieldName, object);
 }
 }
 
+protected Pattern getUrlPattern() {
+if (StringUtils.isNotEmpty(urlRegexExpression)) {
+String regex = (String) parse(urlRegexExpression, String.class);
+if (regex == null) {
+LOG.warn("Provided URL Regex expression [{}] was evaluated to 
null! Falling back to default!", urlRegexExpression);
+urlPattern = Pattern.compile(DEFAULT_URL_REGEX, 
Pattern.CASE_INSENSITIVE);
+} else {
+urlPattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+}
+}
+return urlPattern;
+}
+
 /**
  * This is used to support client-side validation, it's based on
  * 
http://stackoverflow.com/questions/161738/what-is-the-best-regular-expression-to-check-if-a-string-is-a-valid-url
@@ -67,30 +101,11 @@ public class URLValidator extends FieldValidatorSupport {
  * @return regex to validate URLs
  */
 public String getUrlRegex() {
-if (StringUtils.isNotEmpty(urlRegexExpression)) {
-return (String) parse(urlRegexExpression, String.class);
-} else if (StringUtils.isNotEmpty(urlRegex)) {
-return urlRegex;
-} else {
-return "^(https?|ftp):\\/\\/" +
-"(([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+" +
-
"(:([a-z0-9$_\\.\\+!\\*\\'\\(\\),;\\?&=-]|%[0-9a-f]{2})+)?" +
-"@)?(#?" +
-")((([a-z0-9]\\.|[a-z

[1/4] struts git commit: WW-4715 Uses isDefined function instead of null-checking

2016-11-15 Thread lukaszlenart
Repository: struts
Updated Branches:
  refs/heads/master ef2939ffd -> 931df54ab


WW-4715 Uses isDefined function instead of null-checking


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/a245226b
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/a245226b
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/a245226b

Branch: refs/heads/master
Commit: a245226b7f1fa2a2cd94508b132f0220989c1e5b
Parents: ef2939f
Author: Lukasz Lenart 
Authored: Wed Nov 16 07:21:38 2016 +0100
Committer: Lukasz Lenart 
Committed: Wed Nov 16 07:21:38 2016 +0100

--
 .../struts2/interceptor/ProfilingActivationInterceptor.java   | 7 ---
 .../java/org/apache/struts2/interceptor/ScopeInterceptor.java | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/a245226b/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
--
diff --git 
a/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
 
b/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
index d5be374..70927a4 100644
--- 
a/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
+++ 
b/core/src/main/java/org/apache/struts2/interceptor/ProfilingActivationInterceptor.java
@@ -27,6 +27,7 @@ import 
com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.dispatcher.Parameter;
 
 /**
  * 
@@ -93,9 +94,9 @@ public class ProfilingActivationInterceptor extends 
AbstractInterceptor {
 @Override
 public String intercept(ActionInvocation invocation) throws Exception {
 if (devMode) {
-Object val = 
invocation.getInvocationContext().getParameters().get(profilingKey);
-if (val != null) {
-String sval = (val instanceof String ? (String)val : 
((String[])val)[0]);
+Parameter val = 
invocation.getInvocationContext().getParameters().get(profilingKey);
+if (val.isDefined()) {
+String sval = val.getValue();
 boolean enable = BooleanUtils.toBoolean(sval);
 UtilTimerStack.setActive(enable);
 
invocation.getInvocationContext().getParameters().remove(profilingKey);

http://git-wip-us.apache.org/repos/asf/struts/blob/a245226b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java
--
diff --git 
a/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java 
b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java
index fff296b..3bdad8e 100644
--- a/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java
+++ b/core/src/main/java/org/apache/struts2/interceptor/ScopeInterceptor.java
@@ -299,7 +299,7 @@ public class ScopeInterceptor extends AbstractInterceptor 
implements PreResultLi
 }
 }
 
-if (ActionContext.getContext().getParameters().get(sessionReset) != 
null) {
+if 
(ActionContext.getContext().getParameters().get(sessionReset).isDefined()) {
 return;
 }
 



[2/4] struts git commit: Trims input value

2016-11-15 Thread lukaszlenart
Trims input value


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/554b9ddd
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/554b9ddd
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/554b9ddd

Branch: refs/heads/master
Commit: 554b9dddb0fbd1e581ef577dd62a7c22955ad0f6
Parents: a245226
Author: Lukasz Lenart 
Authored: Wed Nov 16 07:30:46 2016 +0100
Committer: Lukasz Lenart 
Committed: Wed Nov 16 07:30:46 2016 +0100

--
 .../com/opensymphony/xwork2/validator/validators/URLValidator.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/554b9ddd/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
--
diff --git 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
index 735d861..8786c18 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/validator/validators/URLValidator.java
@@ -55,7 +55,7 @@ public class URLValidator extends FieldValidatorSupport {
 return;
 }
 
-if (!(value.getClass().equals(String.class)) || 
!Pattern.compile(getUrlRegex(), 
Pattern.CASE_INSENSITIVE).matcher(String.valueOf(value)).matches()) {
+if (!(value.getClass().equals(String.class)) || 
!Pattern.compile(getUrlRegex(), 
Pattern.CASE_INSENSITIVE).matcher(String.valueOf(value).trim()).matches()) {
 addFieldError(fieldName, object);
 }
 }



[3/4] struts git commit: Adds double check using Commons Validator

2016-11-15 Thread lukaszlenart
Adds double check using Commons Validator


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/eb71d886
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/eb71d886
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/eb71d886

Branch: refs/heads/master
Commit: eb71d8869648fdd6418d10f4fc07ef83f9180792
Parents: 554b9dd
Author: Lukasz Lenart 
Authored: Wed Nov 16 07:31:05 2016 +0100
Committer: Lukasz Lenart 
Committed: Wed Nov 16 07:31:05 2016 +0100

--
 core/pom.xml  |  6 ++
 .../xwork2/validator/URLValidatorTest.java| 18 ++
 pom.xml   |  5 +
 3 files changed, 25 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/struts/blob/eb71d886/core/pom.xml
--
diff --git a/core/pom.xml b/core/pom.xml
index 5790faa..9c59d91 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -432,5 +432,11 @@
 test
 
 
+
+commons-validator
+commons-validator
+test
+
+
 
 

http://git-wip-us.apache.org/repos/asf/struts/blob/eb71d886/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java
--
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java 
b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java
index 56a9bcc..438173a 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/URLValidatorTest.java
@@ -19,6 +19,7 @@ import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.XWorkTestCase;
 import com.opensymphony.xwork2.util.ValueStack;
 import com.opensymphony.xwork2.validator.validators.URLValidator;
+import org.apache.commons.validator.routines.UrlValidator;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -133,7 +134,7 @@ public class URLValidatorTest extends XWorkTestCase {
public void testValidUrlWithDefaultRegex() throws Exception {
URLValidator validator = new URLValidator();
 
-Pattern pattern = Pattern.compile(validator.getUrlRegex());
+Pattern pattern = Pattern.compile(validator.getUrlRegex(), 
Pattern.CASE_INSENSITIVE);
 
 assertFalse(pattern.matcher("myapp://test.com").matches());
 assertFalse(pattern.matcher("myap://test.com").matches());
@@ -146,9 +147,18 @@ public class URLValidatorTest extends XWorkTestCase {
 assertTrue(pattern.matcher("https://www.opensymphony.com";).matches());
 
assertTrue(pattern.matcher("https://www.opensymphony.com:443/login";).matches());
 assertTrue(pattern.matcher("http://localhost:8080/myapp";).matches());
-}
 
-   public void testValidUrlCaseInsesitive() throws Exception {
+
assertTrue(pattern.matcher("http://www.legalspace.com/__media__/js/netsoltrademark.php?d=www.a-vos-travaux.fr%2Facheter-un-aspirateur-sans-sac-pas-cher%2F";).matches());
+
assertTrue(UrlValidator.getInstance().isValid("http://www.legalspace.com/__media__/js/netsoltrademark.php?d=www.a-vos-travaux.fr%2Facheter-un-aspirateur-sans-sac-pas-cher%2F";));
+
+   
assertTrue(pattern.matcher("http://www.duadmin.isaev.Infoduadmin.Isaev.info/?a%5B%5D=%3Ca%20href%3Dhttp%3A%2F%2Fwww.aspert.fr%2Fun-seche-cheveux-lisseur-est-il-vraiment-utile%2F%3Eseche%20cheveux%20dyson%20test%3C%2Fa";).matches());
+   
assertTrue(UrlValidator.getInstance().isValid("http://www.duadmin.isaev.Infoduadmin.Isaev.info/?a%5B%5D=%3Ca%20href%3Dhttp%3A%2F%2Fwww.aspert.fr%2Fun-seche-cheveux-lisseur-est-il-vraiment-utile%2F%3Eseche%20cheveux%20dyson%20test%3C%2Fa";));
+
+   
assertTrue(pattern.matcher("http://netsol-underconstruction-page-monitor-1.com/__media__/js/netsoltrademark.php?d=www.le-soutien-scolaire.fr%2Favis-et-test-comparatifs-des-robots-multifonctions%2F";).matches());
+   
assertTrue(UrlValidator.getInstance().isValid("http://netsol-underconstruction-page-monitor-1.com/__media__/js/netsoltrademark.php?d=www.le-soutien-scolaire.fr%2Favis-et-test-comparatifs-des-robots-multifonctions%2F";));
+   }
+
+   public void testValidUrlCaseInsensitive() throws Exception {
// given
final Map fieldErrors = new HashMap<>();
 
@@ -222,7 +232,7 @@ public class URLValidatorTest extends XWorkTestCase {
}

public String getTestingUrl5() {
-   return "http://yahoo.com/articles?id=123";;
+   return "http://yahoo.com/articles?id=123\n";;
}
}