You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/06/20 12:58:15 UTC

[2/2] syncope git commit: [SYNCOPE-1321] Re-add + in case it was escaped from timezone

[SYNCOPE-1321] Re-add + in case it was escaped from timezone


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

Branch: refs/heads/2_0_X
Commit: 30ca135617f6d4e25eee141fb01a51b2258020f8
Parents: c8ed968
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Jun 20 14:54:28 2018 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Jun 20 14:58:02 2018 +0200

----------------------------------------------------------------------
 .../core/persistence/api/search/SearchCondVisitor.java    | 10 ++++++++++
 .../java/org/apache/syncope/fit/core/SearchITCase.java    |  9 +++++++++
 2 files changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/30ca1356/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
index 29ee195..7d31626 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/search/SearchCondVisitor.java
@@ -23,6 +23,7 @@ import java.net.URLDecoder;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 import org.apache.cxf.jaxrs.ext.search.ConditionType;
 import org.apache.cxf.jaxrs.ext.search.SearchBean;
 import org.apache.cxf.jaxrs.ext.search.SearchCondition;
@@ -50,6 +51,8 @@ import org.apache.syncope.core.persistence.api.dao.search.RelationshipTypeCond;
  */
 public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean, SearchCond> {
 
+    private static final Pattern TIMEZONE = Pattern.compile(".* [0-9]{4}$");
+
     private String realm;
 
     private SearchCond searchCond;
@@ -79,6 +82,13 @@ public class SearchCondVisitor extends AbstractSearchConditionVisitor<SearchBean
             value = SearchUtils.toSqlWildcardString(
                     URLDecoder.decode(sc.getStatement().getValue().toString(), StandardCharsets.UTF_8.name()), false).
                     replaceAll("\\\\_", "_");
+
+            // see SYNCOPE-1321
+            if (TIMEZONE.matcher(value).matches()) {
+                char[] valueAsArray = value.toCharArray();
+                valueAsArray[valueAsArray.length - 5] = '+';
+                value = new String(valueAsArray);
+            }
         } catch (UnsupportedEncodingException e) {
             throw new IllegalArgumentException("While decoding " + sc.getStatement().getValue(), e);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/30ca1356/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
index a03abe5..7c3e96a 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SearchITCase.java
@@ -296,6 +296,15 @@ public class SearchITCase extends AbstractITCase {
         assertNotNull(users);
         assertEquals(1, users.getTotalCount());
         assertEquals(1, users.getResult().size());
+
+        // SYNCOPE-1321
+        PagedResult<UserTO> issueSYNCOPE1321 = userService.search(new AnyQuery.Builder().
+                realm(SyncopeConstants.ROOT_REALM).
+                fiql(SyncopeClient.getUserSearchConditionBuilder().
+                        is("lastLoginDate").lexicalNotBefore("2016-03-02T15:21:22+0300").
+                        and("username").equalTo("bellini").query()).
+                build());
+        assertEquals(users, issueSYNCOPE1321);
     }
 
     @Test