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/03/09 14:46:19 UTC
[4/4] syncope git commit: Review fields usable for search and orderBy
Review fields usable for search and orderBy
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/7b168c14
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/7b168c14
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/7b168c14
Branch: refs/heads/master
Commit: 7b168c142b09c3b03e39f1449211e7ddf026a14d
Parents: 717289b
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Mar 7 12:21:21 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Mar 9 15:27:43 2018 +0100
----------------------------------------------------------------------
.../common/lib/search/SearchableFields.java | 2 +-
.../jpa/dao/AbstractAnySearchDAO.java | 11 +++++++++++
.../persistence/jpa/dao/JPAAnySearchDAO.java | 4 ++--
.../apache/syncope/fit/core/SearchITCase.java | 19 +++++++++++++++++++
4 files changed, 33 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/7b168c14/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
index 5dbf149..77a7d13 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java
@@ -36,7 +36,7 @@ import org.apache.syncope.common.lib.types.AnyTypeKind;
public final class SearchableFields {
private static final String[] ATTRIBUTES_NOTINCLUDED = {
- "serialVersionUID", "password", "type", "udynMembershipCond"
+ "serialVersionUID", "password", "type", "udynMembershipCond", "securityAnswer", "token", "tokenExpireTime"
};
private static final Set<String> ANY_FIELDS = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/syncope/blob/7b168c14/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
index c8b27d2..178fa00 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnySearchDAO.java
@@ -30,6 +30,7 @@ import javax.persistence.Entity;
import javax.validation.ValidationException;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.commons.lang3.tuple.Pair;
@@ -67,6 +68,10 @@ import org.springframework.util.ReflectionUtils;
public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implements AnySearchDAO {
+ private static final String[] ORDER_BY_NOT_ALLOWED = {
+ "serialVersionUID", "password", "securityQuestion", "securityAnswer", "token", "tokenExpireTime"
+ };
+
@Autowired
protected RealmDAO realmDAO;
@@ -129,6 +134,12 @@ public abstract class AbstractAnySearchDAO extends AbstractDAO<Any<?>> implement
return search(SyncopeConstants.FULL_ADMIN_REALMS, cond, -1, -1, orderBy, kind);
}
+ protected List<OrderByClause> filterOrderBy(final List<OrderByClause> orderBy) {
+ return orderBy.stream().
+ filter(clause -> !ArrayUtils.contains(ORDER_BY_NOT_ALLOWED, clause.getField())).
+ collect(Collectors.toList());
+ }
+
protected abstract <T extends Any<?>> List<T> doSearch(
Set<String> adminRealms,
SearchCond searchCondition,
http://git-wip-us.apache.org/repos/asf/syncope/blob/7b168c14/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 0f0df60..7ffd176 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -276,13 +276,13 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
}
private OrderBySupport parseOrderBy(
- final AnyTypeKind kind, final SearchSupport svs, final List<OrderByClause> orderByClauses) {
+ final AnyTypeKind kind, final SearchSupport svs, final List<OrderByClause> orderBy) {
AnyUtils attrUtils = anyUtilsFactory.getInstance(kind);
OrderBySupport obs = new OrderBySupport();
- for (OrderByClause clause : orderByClauses) {
+ for (OrderByClause clause : filterOrderBy(orderBy)) {
OrderBySupport.Item item = new OrderBySupport.Item();
// Manage difference among external key attribute and internal JPA @Id
http://git-wip-us.apache.org/repos/asf/syncope/blob/7b168c14/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 0677ad7..e159778 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
@@ -25,6 +25,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
import javax.ws.rs.core.Response;
+import org.apache.commons.lang3.RandomStringUtils;
import org.apache.syncope.client.lib.SyncopeClient;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.patch.AnyObjectPatch;
@@ -348,6 +349,24 @@ public class SearchITCase extends AbstractITCase {
}
@Test
+ public void searchBySecurityAnswer() {
+ String securityAnswer = RandomStringUtils.randomAlphanumeric(10);
+ UserTO userTO = UserITCase.getUniqueSampleTO("securityAnswer@syncope.apache.org");
+ userTO.setSecurityQuestion("887028ea-66fc-41e7-b397-620d7ea6dfbb");
+ userTO.setSecurityAnswer(securityAnswer);
+
+ userTO = createUser(userTO).getEntity();
+ assertNotNull(userTO.getSecurityQuestion());
+
+ PagedResult<UserTO> matchingUsers = userService.search(
+ new AnyQuery.Builder().realm(SyncopeConstants.ROOT_REALM).
+ fiql(SyncopeClient.getUserSearchConditionBuilder().
+ is("securityAnswer").equalTo(securityAnswer).query()).build());
+ assertNotNull(matchingUsers);
+ assertTrue(matchingUsers.getResult().isEmpty());
+ }
+
+ @Test
public void assignable() {
PagedResult<GroupTO> groups = groupService.search(new AnyQuery.Builder().realm("/even/two").page(1).size(1000).
fiql(SyncopeClient.getGroupSearchConditionBuilder().isAssignable().