From 718d470c1b1414ea37f0dcc2226c8dca1ce4d7ea Mon Sep 17 00:00:00 2001 From: etj Date: Fri, 17 Jan 2020 16:17:30 +0100 Subject: [PATCH] #128: jdk11: ldap refactoring --- src/services/core/persistence/pom.xml | 2 +- .../geofence/core/dao/AdminRuleDAO.java | 3 +- .../geofence/core/dao/GFUserDAO.java | 3 +- .../geofence/core/dao/GSInstanceDAO.java | 3 +- .../geofence/core/dao/GSUserDAO.java | 4 + .../core/dao/RestrictedGenericDAO.java | 6 - .../geoserver/geofence/core/dao/RuleDAO.java | 3 +- .../geofence/core/dao/SearchableDAO.java | 20 ++++ .../geofence/core/dao/UserGroupDAO.java | 9 +- .../geofence/core/dao/impl/GSUserDAOImpl.java | 67 +++++++---- .../core/dao/impl/UserGroupDAOImpl.java | 78 +++++++++---- .../geofence/core/dao/BaseDAOTest.java | 4 +- .../geofence/services/UserAdminService.java | 1 - .../services/AuthorizationServiceImpl.java | 14 +-- .../services/UserAdminServiceImpl.java | 44 +------ .../services/UserGroupAdminServiceImpl.java | 40 ++----- src/services/modules/ldap/pom.xml | 63 ++++++----- .../ldap/dao/impl/GSUserDAOLdapImpl.java | 86 ++++++++++---- .../geofence/ldap/dao/impl/LDAPBaseDAO.java | 79 +++++-------- .../ldap/dao/impl/UserGroupDAOLdapImpl.java | 70 +++++++++++- .../geofence/ldap/utils/LdapUtils.java | 28 +---- .../geofence/ldap/dao/impl/BaseDAOTest.java | 107 +++++++++--------- .../ldap/dao/impl/GSUserDAOLdapImplTest.java | 27 ++--- .../dao/impl/UserGroupDAOLdapImplTest.java | 30 ++--- .../rest/impl/BaseRESTServiceImpl.java | 2 +- .../rest/impl/RESTUserServiceImpl.java | 8 +- src/services/pom.xml | 5 +- 27 files changed, 431 insertions(+), 375 deletions(-) create mode 100644 src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java diff --git a/src/services/core/persistence/pom.xml b/src/services/core/persistence/pom.xml index 17aca665..e5e85489 100644 --- a/src/services/core/persistence/pom.xml +++ b/src/services/core/persistence/pom.xml @@ -215,7 +215,7 @@ org.slf4j slf4j-simple - 1.7.26 + 1.7.30 test diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java index c1234a0c..3db1d224 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/AdminRuleDAO.java @@ -14,7 +14,8 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface AdminRuleDAO extends PrioritizableDAO { +public interface AdminRuleDAO // + extends PrioritizableDAO, SearchableDAO { long persist(AdminRule entity, InsertPosition position); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java index e40ee617..0ae1587c 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GFUserDAO.java @@ -13,5 +13,6 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface GFUserDAO extends RestrictedGenericDAO { +public interface GFUserDAO // + extends RestrictedGenericDAO, SearchableDAO { } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java index 6c5e4af0..25f5f9e8 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSInstanceDAO.java @@ -13,5 +13,6 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface GSInstanceDAO extends RestrictedGenericDAO { +public interface GSInstanceDAO // + extends RestrictedGenericDAO, SearchableDAO { } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java index c2fee6f2..4ab65801 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/GSUserDAO.java @@ -5,6 +5,7 @@ package org.geoserver.geofence.core.dao; +import java.util.List; import org.geoserver.geofence.core.model.GSUser; /** @@ -17,4 +18,7 @@ public interface GSUserDAO extends RestrictedGenericDAO, RegistrableDAO /** Fetch a GSUser with all of its related groups */ GSUser getFull(String name); + + List search(String nameLike, Integer page, Integer entries, boolean fetchGroups) throws IllegalArgumentException; + long countByNameLike(String nameLike); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java index 2dc720bd..a25806b3 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RestrictedGenericDAO.java @@ -19,16 +19,10 @@ */ public interface RestrictedGenericDAO /* extends GenericDAO */{ - - public Search createSearch(); - public Search createCountSearch(); - public List findAll(); public ENTITY find(Long id); public void persist(ENTITY... entities); public ENTITY merge(ENTITY entity); public boolean remove(ENTITY entity); public boolean removeById(Long id); - public List search(Search search); - public long count(Search search); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java index 9cf52548..da48226b 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/RuleDAO.java @@ -14,7 +14,8 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface RuleDAO extends PrioritizableDAO { +public interface RuleDAO // + extends PrioritizableDAO, SearchableDAO { long persist(Rule entity, InsertPosition position); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java new file mode 100644 index 00000000..8adf52c8 --- /dev/null +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/SearchableDAO.java @@ -0,0 +1,20 @@ +/* (c) 2020 Open Source Geospatial Foundation - all rights reserved + * This code is licensed under the GPL 2.0 license, available at the root + * application directory. + */ +package org.geoserver.geofence.core.dao; + +import java.util.List; +import org.geoserver.geofence.core.dao.search.Search; + +/** + * @author Emanuele Tajariol (etj at geo-solutions.it) + */ +public interface SearchableDAO { + + public Search createSearch(); + public Search createCountSearch(); + + public List search(Search search); + public long count(Search search); +} diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java index 8f8149eb..528a7236 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/UserGroupDAO.java @@ -5,6 +5,7 @@ package org.geoserver.geofence.core.dao; +import java.util.List; import org.geoserver.geofence.core.model.UserGroup; /** @@ -13,5 +14,11 @@ * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public interface UserGroupDAO extends RestrictedGenericDAO, RegistrableDAO { +public interface UserGroupDAO // + extends RestrictedGenericDAO, RegistrableDAO { + + UserGroup get(String name); + + List search(String nameLike, Integer page, Integer entries) throws IllegalArgumentException; + long countByNameLike(String nameLike); } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java index bd6d0794..535520b6 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/GSUserDAOImpl.java @@ -66,38 +66,17 @@ public GSUser getFull(String name) { */ protected GSUser searchFull(Search search) { search.addFetch("userGroups"); + // When fetching users with multiple groups, the gsusers list id multiplied for the number of groups found search.setDistinct(true); List users = super.search(search); - - // When fetching users with multiple groups, the gsusers list id multiplied for the number of groups found. - // Next there is a workaround to this problem; maybe this: - // search.setDistinct(true); - // Dunno if some annotations in the GSUser definition are wrong, some deeper checks have to be performed. - + switch(users.size()) { case 0: return null; case 1: return users.get(0); default: -// if(users.size() == users.get(0).getGroups().size()) { // normal hibernate behaviour -// if(LOGGER.isDebugEnabled()) { // perform some more consistency tests only when debugging -// for (GSUser user : users) { -// if(user.getId() != users.get(0).getId() || -// user.getGroups().size() != users.get(0).getGroups().size()) { -// LOGGER.error("Inconsistent userlist " + user); -// } -// } -// } -// -// return users.get(0); -// } else { -// LOGGER.error("Too many users in unique search " + search); -// for (GSUser user : users) { -// LOGGER.error(" " + user + " grp:"+user.getGroups().size()); -// } - throw new IllegalStateException("Found more than one user (search:"+search+")"); -// } + throw new IllegalStateException("Found more than one user (search:"+search+")"); } } @@ -120,4 +99,44 @@ public boolean removeById(Long id) return super.removeById(id); } + @Override + public List search(String nameLike, Integer page, Integer entries, boolean fetchGroups) throws IllegalArgumentException { + + if( (page != null && entries == null) || (page ==null && entries != null)) { + throw new IllegalArgumentException("Page and entries params should be declared together."); + } + + Search search = createSearch(); + + if(page != null) { + search.setMaxResults(entries); + search.setPage(page); + } + + if(fetchGroups) { + search.addFetch("userGroups"); + search.setDistinct(true); + } + + search.addSortAsc("name"); + + if (nameLike != null) { + search.addFilterILike("name", nameLike); + } + + return search(search); + } + + + @Override + public long countByNameLike(String nameLike) { + Search searchCriteria = createCountSearch(); + + if (nameLike != null) { + searchCriteria.addFilterILike("name", nameLike); + } + + return count(searchCriteria); + } + } diff --git a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java index 3e34f82d..41c34782 100644 --- a/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java +++ b/src/services/core/persistence/src/main/java/org/geoserver/geofence/core/dao/impl/UserGroupDAOImpl.java @@ -2,7 +2,6 @@ * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ - package org.geoserver.geofence.core.dao.impl; import java.util.Date; @@ -14,10 +13,10 @@ import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.geoserver.geofence.core.dao.search.Search; +import org.geoserver.geofence.core.model.GSUser; import org.springframework.transaction.annotation.Transactional; - /** * Public implementation of the UserGroupDAO interface * @@ -25,21 +24,19 @@ */ @Transactional(value = "geofenceTransactionManager") public class UserGroupDAOImpl extends BaseDAO - // extends GenericDAOImpl - implements UserGroupDAO -{ + // extends GenericDAOImpl + implements UserGroupDAO { + private static final Logger LOGGER = LogManager.getLogger(UserGroupDAOImpl.class); public UserGroupDAOImpl() { super(UserGroup.class); } - + @Override - public void persist(UserGroup... entities) - { + public void persist(UserGroup... entities) { Date now = new Date(); - for (UserGroup e : entities) - { + for (UserGroup e : entities) { e.setDateCreation(now); } @@ -47,35 +44,66 @@ public void persist(UserGroup... entities) } @Override - public List findAll() - { + public List findAll() { return super.findAll(); } @Override - public List search(Search search) - { - return super.search(search); - } - - @Override - public UserGroup merge(UserGroup entity) - { + public UserGroup merge(UserGroup entity) { return super.merge(entity); } @Override - public boolean remove(UserGroup entity) - { + public boolean remove(UserGroup entity) { return super.remove(entity); } @Override - public boolean removeById(Long id) - { + public boolean removeById(Long id) { return super.removeById(id); } - // ========================================================================== + @Override + public UserGroup get(String name) { + Search search = createSearch(); + search.addFilterEqual("name", name); + return (UserGroup)searchUnique(search); + } + + @Override + public List search(String nameLike, Integer page, Integer entries) throws IllegalArgumentException { + + if( (page != null && entries == null) || (page ==null && entries != null)) { + throw new IllegalArgumentException("Page and entries params should be declared together."); + } + + Search search = createSearch(); + + if(page != null) { + search.setMaxResults(entries); + search.setPage(page); + } + + search.addSortAsc("name"); + + if (nameLike != null) { + search.addFilterILike("name", nameLike); + } + + return search(search); + } + + + @Override + public long countByNameLike(String nameLike) { + Search searchCriteria = createCountSearch(); + + if (nameLike != null) { + searchCriteria.addFilterILike("name", nameLike); + } + + return count(searchCriteria); + } + } diff --git a/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java b/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java index dd47214c..c2c67ab4 100644 --- a/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java +++ b/src/services/core/persistence/src/test/java/org/geoserver/geofence/core/dao/BaseDAOTest.java @@ -99,7 +99,7 @@ protected void removeAllUsers() { assertNull("User not removed", userDAO.find(item.getId())); } - assertEquals("Users have not been properly deleted", 0, userDAO.count(null)); + assertEquals("Users have not been properly deleted", 0, userDAO.countByNameLike(null)); } protected void removeAllGRUsers() { @@ -132,7 +132,7 @@ protected void removeAllUserGroups() { assertNull("UserGroup not removed", userGroupDAO.find(item.getId())); } - assertEquals("UserGroups have not been properly deleted", 0, userGroupDAO.count(null)); + assertEquals("UserGroups have not been properly deleted", 0, userGroupDAO.countByNameLike(null)); } protected GSUser createUser(String base, UserGroup userGroup) { diff --git a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java index d30ca753..2e032867 100644 --- a/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java +++ b/src/services/core/services-api/src/main/java/org/geoserver/geofence/services/UserAdminService.java @@ -40,7 +40,6 @@ public interface UserAdminService extends GetProviderService */ @Override GSUser get(long id) throws NotFoundServiceEx; - GSUser get(String name) throws NotFoundServiceEx; GSUser getFull(String name) throws NotFoundServiceEx; long getCount(String nameLike); diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java index 52b7e64e..bc270ad7 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/AuthorizationServiceImpl.java @@ -7,10 +7,8 @@ import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.dao.GSUserDAO; -import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.AuthUser; -import java.util.List; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; @@ -27,7 +25,7 @@ public class AuthorizationServiceImpl implements AuthorizationService { @Override public AuthUser authorize(String username, String password) { - GSUser user = getUserByName(username); + GSUser user = userDAO.getFull(username); if(user == null) { LOGGER.debug("User not found " + username); return null; @@ -40,16 +38,6 @@ public AuthUser authorize(String username, String password) { return new AuthUser(username, user.isAdmin() ? AuthUser.Role.ADMIN : AuthUser.Role.USER); } - private GSUser getUserByName(String userName) { - Search search = userDAO.createSearch(); - search.addFilterEqual("name", userName); - List users = userDAO.search(search); - if(users.size() > 1) - throw new IllegalStateException("Found more than one user with name '"+userName+"'"); - - return users.isEmpty() ? null : users.get(0); - } - public void setGsUserDAO(GSUserDAO userDAO) { this.userDAO = userDAO; } diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java index 44e8032e..0c0bfaed 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserAdminServiceImpl.java @@ -8,7 +8,6 @@ import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.dao.GSUserDAO; -import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.ShortUser; @@ -60,21 +59,6 @@ public GSUser get(long id) throws NotFoundServiceEx { return user; } - @Override - public GSUser get(String name) { - Search search = userDAO.createSearch(); - search.addFilterEqual("name", name); - List users = userDAO.search(search); - - if(users.isEmpty()) - throw new NotFoundServiceEx("User not found '"+ name + "'"); - else if(users.size() > 1) - throw new IllegalStateException("Found more than one user with name '"+name+"'"); - else - return users.get(0); - } - - @Override public GSUser getFull(String name) throws NotFoundServiceEx { @@ -102,25 +86,7 @@ public List getFullList(String nameLike, Integer page, Integer entries, throw new BadRequestServiceEx("Page and entries params should be declared together."); } - Search searchCriteria = userDAO.createSearch(); - - if(page != null) { - searchCriteria.setMaxResults(entries); - searchCriteria.setPage(page); - } - - if(fetchGroups) { - searchCriteria.addFetch("userGroups"); - } - - searchCriteria.addSortAsc("name"); - - if (nameLike != null) { - searchCriteria.addFilterILike("name", nameLike); - } - - List found = userDAO.search(searchCriteria); - return found; + return userDAO.search(nameLike, page, entries, fetchGroups); } @Override @@ -130,13 +96,7 @@ public List getList(String nameLike, Integer page, Integer entries) { @Override public long getCount(String nameLike) { - Search searchCriteria = userDAO.createCountSearch(); - - if (nameLike != null) { - searchCriteria.addFilterILike("name", nameLike); - } - - return userDAO.count(searchCriteria); + return userDAO.countByNameLike(nameLike); } // ========================================================================== diff --git a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java index 5468e8d7..5f7f6587 100644 --- a/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java +++ b/src/services/core/services-impl/src/main/java/org/geoserver/geofence/services/UserGroupAdminServiceImpl.java @@ -7,9 +7,7 @@ import org.geoserver.geofence.core.model.UserGroup; import org.geoserver.geofence.core.dao.UserGroupDAO; -import org.geoserver.geofence.core.dao.search.Search; import org.geoserver.geofence.services.dto.ShortGroup; -import org.geoserver.geofence.services.exception.BadRequestServiceEx; import org.geoserver.geofence.services.exception.NotFoundServiceEx; import java.util.List; @@ -74,18 +72,14 @@ public UserGroup get(long id) throws NotFoundServiceEx { } @Override - public UserGroup get(String name) { - Search search = userGroupDAO.createSearch(); - search.addFilterEqual("name", name); - List groups = userGroupDAO.search(search); + public UserGroup get(String name) { + UserGroup group = userGroupDAO.get(name); - if ( groups.isEmpty() ) { + if ( group == null ) { throw new NotFoundServiceEx("UserGroup not found '" + name + "'"); - } else if ( groups.size() > 1 ) { - throw new IllegalStateException("Found more than one UserGroup with name '" + name + "'"); - } else { - return groups.get(0); - } + } + + return group; } @Override @@ -102,31 +96,13 @@ public boolean delete(long id) throws NotFoundServiceEx { @Override public List getList(String nameLike, Integer page, Integer entries) { - Search searchCriteria = buildCriteria(page, entries, nameLike); - List found = userGroupDAO.search(searchCriteria); + List found = userGroupDAO.search(nameLike, page, entries); return convertToShortList(found); } @Override public long getCount(String nameLike) { - Search searchCriteria = buildCriteria(null, null, nameLike); - return userGroupDAO.count(searchCriteria); - } - - protected Search buildCriteria(Integer page, Integer entries, String nameLike) throws BadRequestServiceEx { - if ( (page != null && entries == null) || (page == null && entries != null) ) { - throw new BadRequestServiceEx("Page and entries params should be declared together."); - } - Search searchCriteria = userGroupDAO.createSearch(); - if ( page != null ) { - searchCriteria.setMaxResults(entries); - searchCriteria.setPage(page); - } - searchCriteria.addSortAsc("name"); - if ( nameLike != null ) { - searchCriteria.addFilterILike("name", nameLike); - } - return searchCriteria; + return userGroupDAO.countByNameLike(nameLike); } // ========================================================================== diff --git a/src/services/modules/ldap/pom.xml b/src/services/modules/ldap/pom.xml index 923286b3..1bd6d567 100644 --- a/src/services/modules/ldap/pom.xml +++ b/src/services/modules/ldap/pom.xml @@ -20,6 +20,10 @@ jar GeoFence - Module - LDAP Support + + 2.0.0.AM25 + + @@ -53,23 +57,16 @@ com.google.guava guava - 28.0-jre + 28.1-jre - - - org.springframework.ldap - spring-ldap-test + spring-ldap-test test @@ -86,37 +83,43 @@ org.apache.directory.server apacheds-core - 1.5.5 + ${apacheldap-version} test org.apache.directory.server - apacheds-core-entry - 1.5.5 + apacheds-protocol-shared + ${apacheldap-version} test org.apache.directory.server - apacheds-protocol-shared - 1.5.5 + apacheds-protocol-ldap + ${apacheldap-version} test org.apache.directory.server - apacheds-protocol-ldap - 1.5.5 + apacheds-server-jndi + ${apacheldap-version} test org.apache.directory.server - apacheds-server-jndi - 1.5.5 + apacheds-server-annotations + ${apacheldap-version} + test + + + org.apache.directory.server + apacheds-server-integ + ${apacheldap-version} test - org.apache.directory.shared - shared-ldap - 0.9.15 + org.apache.directory.server + apacheds-test-framework + ${apacheldap-version} test @@ -141,14 +144,6 @@ - @@ -169,8 +164,16 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + false + + + - diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java index 2e610303..c166e0ff 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImpl.java @@ -7,15 +7,15 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.HashSet; +import java.util.LinkedList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.geoserver.geofence.core.dao.GSUserDAO; import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.model.UserGroup; +import org.geoserver.geofence.ldap.utils.LdapUtils; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.Search; /** * GSUserDAO implementation, using an LDAP server as a primary source. @@ -23,7 +23,10 @@ * @author "Mauro Bartolomeoli - mauro.bartolomeoli@geo-solutions.it" * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public class GSUserDAOLdapImpl extends LDAPBaseDAO implements GSUserDAO { + +public class GSUserDAOLdapImpl // + extends LDAPBaseDAO // + implements GSUserDAO { private UserGroupDAOLdapImpl userGroupDAOLdapImpl; @@ -52,17 +55,15 @@ public GSUserDAOLdapImpl() { * @return */ private List getGroups(GSUser user) { - Filter filter = new Filter(); - String member; - List groups; - String filterStr = null; + final String filterStr; String dn = user.getExtId(); String userName = user.getName(); + if (memberFilter != null) { - filterStr = MessageFormat.format(memberFilter, new String[] { dn, userName }); + filterStr = MessageFormat.format(memberFilter, dn, userName); } else if (StringUtils.isNotBlank(dn)) { - filter = new Filter("member", dn); + filterStr = LdapUtils.createLDAPFilterEqual("member", dn, userGroupDAOLdapImpl.getAttributesMapper()); } else { LOGGER.info("User id is null, using username '" + userName + "'"); String nameAttr = getLDAPAttribute("username"); @@ -71,19 +72,17 @@ private List getGroups(GSUser user) { if (memberSearchFilterAttr != null) { // e.g String member = nameAttr + "=" + userName; String val = memberSearchFilterAttr.split("=")[0]; // e.g get uniqueMember part - member = memberSearchFilterAttr.split("=", 2)[1]; // e.g remove uniqueMember part + String member = memberSearchFilterAttr.split("=", 2)[1]; // e.g remove uniqueMember part member = member.replace("{0}", userName); filterStr = val + '=' + member; } else { String exp = nameAttr + "=" + userName; - filter = new Filter("member", exp); + filterStr = LdapUtils.createLDAPFilterEqual("member", exp, userGroupDAOLdapImpl.getAttributesMapper()); } } - if (filterStr == null) { - groups = userGroupDAOLdapImpl.search(filter); - } else { - groups = userGroupDAOLdapImpl.search(filterStr); - } + + List groups = userGroupDAOLdapImpl.search(filterStr); + if (enableHierarchicalGroups && nestedMemberFilter != null) { for (UserGroup group : groups) { groups = addParentGroups(groups, group, 0); @@ -96,8 +95,7 @@ private List addParentGroups(List groups, UserGroup group, if (level < maxLevelGroupsSearch) { List newGroups = new ArrayList(); newGroups.addAll(groups); - String filter = MessageFormat.format(nestedMemberFilter, - new String[] { group.getExtId(), group.getName() }); + String filter = MessageFormat.format(nestedMemberFilter, group.getExtId(), group.getName()); for(UserGroup parentGroup : (List)userGroupDAOLdapImpl.search(filter)) { if (!newGroups.contains(parentGroup)) { newGroups.add(parentGroup); @@ -131,9 +129,8 @@ private GSUser fillWithGroups(GSUser user) { public GSUser searchByName(String name) { - Search search = new Search(); - search.addFilter(new Filter("username", name)); - List users = search(search); + String filter = LdapUtils.createLDAPFilterEqual("username", name, getAttributesMapper()); + List users = search(filter); if (users.isEmpty()) return null; @@ -162,4 +159,51 @@ public void setNestedMemberFilter(String nestedMemberFilter) { public void setEnableHierarchicalGroups(boolean enableHierarchicalGroups) { this.enableHierarchicalGroups = enableHierarchicalGroups; } + + @Override + public List search(String nameLike, Integer page, Integer entries, boolean fetchGroups) throws IllegalArgumentException { + + if (StringUtils.isBlank(nameLike)) { + return paginate(findAll(), entries, page); + } + + // filtering needed -- we'll perform filtering by hand, and contectually + // pagination will be evalueated, in order to save memory and time + + int firstIndex = getFirstPaginationIndex(entries, page); + int lastIndex = getLastPaginationIndex(entries, page); + + List ret = new LinkedList<>(); + int index = 0; + for (GSUser user : findAll()) { + if(user.getName().contains(nameLike)) { + if(++index > firstIndex ) { + ret.add(user); + } + + if(index >= lastIndex) { + break; + } + } + } + + return ret; + } + + @Override + public long countByNameLike(String nameLike) { + + if (StringUtils.isBlank(nameLike)) { + return findAll().size(); + } + + int cnt = 0; + for (GSUser user : findAll()) { + if(user.getName().contains(nameLike)) { + ++cnt; + } + } + + return cnt; + } } diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java index 960204d9..ffeb36d1 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/LDAPBaseDAO.java @@ -23,15 +23,12 @@ import org.geoserver.geofence.core.dao.RestrictedGenericDAO; import org.geoserver.geofence.core.model.GSUser; import org.geoserver.geofence.core.model.UserGroup; -import org.geoserver.geofence.ldap.utils.LdapUtils; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.DirContextOperations; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.AbstractContextMapper; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.ISearch; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; @@ -53,7 +50,7 @@ public abstract class LDAPBaseDAO, R> implements RestrictedGenericDAO, InitializingBean { - private static final class LDAPContextMapper extends AbstractContextMapper { + protected static final class LDAPContextMapper extends AbstractContextMapper { AttributesMapper mapper; public LDAPContextMapper(AttributesMapper mapper) { @@ -135,39 +132,32 @@ public R find(Long id) return null; } - @Override - public List search(ISearch search) - { - List objects = new ArrayList<>(); - if (search.getFilters().isEmpty()) { - // no filter - return paginate(findAll(), search); - } - for (Filter filter : search.getFilters()) { - if (filter != null) { - List filteredObjects = paginate(search(filter), search); - objects.addAll(filteredObjects); - } - } - return objects; - } - - protected List paginate(List list, ISearch search) { - if (search.getMaxResults() > 0 && search.getPage() >= 0) { - List result = new ArrayList(); - int start = search.getPage() * search.getMaxResults(); - for(int index = start ; index < start + search.getMaxResults() && index < list.size(); index++) { + protected List paginate(List list, Integer entries, Integer page) { + if (entries != null && page != null && entries > 0 && page >= 0) { + List result = new ArrayList<>(entries); + int start = page * entries; + for(int index = start ; index < start + entries && index < list.size(); index++) { result.add(list.get(index)); } return result; } return list; } - - @Override - public int count(ISearch search) - { - return search(search).size(); + + protected int getFirstPaginationIndex(Integer entries, Integer page) { + if (entries != null && page != null && entries > 0 && page >= 0) { + return page * entries; + } else { + return 0; + } + } + + protected int getLastPaginationIndex(Integer entries, Integer page) { + if (entries != null && page != null && entries > 0 && page >= 0) { + return page * entries + entries; + } else { + return Integer.MAX_VALUE; + } } @Override @@ -211,28 +201,13 @@ public R lookup(String dn) /** * Search using the given filter on the LDAP server. Uses default base, filter and mapper. * - * @param base - * @param filter - * @param mapper - * @return - */ - public List search(Filter filter) - { - return search(LdapUtils.createLDAPFilter(filter, attributesMapper)); - } - - /** - * Search using the given filter on the LDAP server. Uses default base, filter and mapper. - * - * @param base - * @param filter - * @param mapper + * @param ldapFilter * @return */ - public List search(String filter) + public List search(String ldapFilter) { if(LOGGER.isTraceEnabled()) - LOGGER.trace(getClass().getSimpleName() + ": searching base:'"+searchBase+"', filter: '"+filter+"'"); + LOGGER.trace(getClass().getSimpleName() + ": searching base:'"+searchBase+"', filter: '"+ldapFilter+"'"); if(LOGGER.isInfoEnabled()) { if(dumpCnt.incrementAndGet() % cachedumpmodulo == 0) { @@ -241,7 +216,7 @@ public List search(String filter) } try { - return ldapcache.get(filter); + return ldapcache.get(ldapFilter); //return search(ldapTemplate, searchBase, filter, attributesMapper); } catch (ExecutionException ex) { LOGGER.warn("Error while getting LDAP info: " + ex.getMessage(), ex); @@ -301,6 +276,10 @@ public void setAttributesMapper(AttributesMapper attributesMapper) this.attributesMapper = attributesMapper; } + protected AttributesMapper getAttributesMapper() { + return attributesMapper; + } + /** * Sets the LDAP communication object. * diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java index 3fc9714e..df2cb2c9 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImpl.java @@ -4,8 +4,12 @@ */ package org.geoserver.geofence.ldap.dao.impl; +import java.util.LinkedList; +import java.util.List; +import org.apache.commons.lang.StringUtils; import org.geoserver.geofence.core.dao.UserGroupDAO; import org.geoserver.geofence.core.model.UserGroup; +import org.geoserver.geofence.ldap.utils.LdapUtils; /** * UserGroupDAO implementation, using an LDAP server as a primary source. @@ -13,7 +17,9 @@ * @author "Mauro Bartolomeoli - mauro.bartolomeoli@geo-solutions.it" * @author Emanuele Tajariol (etj at geo-solutions.it) */ -public class UserGroupDAOLdapImpl extends LDAPBaseDAO implements UserGroupDAO +public class UserGroupDAOLdapImpl // + extends LDAPBaseDAO // + implements UserGroupDAO { public UserGroupDAOLdapImpl() @@ -23,4 +29,66 @@ public UserGroupDAOLdapImpl() setSearchBase("ou=Groups"); setSearchFilter("objectClass=posixGroup"); } + + @Override + public UserGroup get(String name) { + + String filter = LdapUtils.createLDAPFilterEqual("groupname", name, getAttributesMapper()); + List groups = search(filter); + + if (groups.isEmpty()) + return null; + else if (groups.size() > 1) + throw new IllegalArgumentException( + "Given filter (" + name + ") returns too many groups (" + groups.size() + ")"); + else + return groups.get(0); + } + + @Override + public List search(String nameLike, Integer page, Integer entries) throws IllegalArgumentException { + + if (StringUtils.isBlank(nameLike)) { + return paginate(findAll(), entries, page); + } + + // filtering needed -- we'll perform filtering by hand, and contectually + // pagination will be evalueated, in order to save memory and time + + int firstIndex = getFirstPaginationIndex(entries, page); + int lastIndex = getLastPaginationIndex(entries, page); + + List ret = new LinkedList<>(); + int index = 0; + for (UserGroup user : findAll()) { + if(user.getName().contains(nameLike)) { + if(++index > firstIndex ) { + ret.add(user); + } + + if(index >= lastIndex) { + break; + } + } + } + + return ret; + } + + @Override + public long countByNameLike(String nameLike) { + + if (StringUtils.isBlank(nameLike)) { + return findAll().size(); + } + + int cnt = 0; + for (UserGroup user : findAll()) { + if(user.getName().contains(nameLike)) { + ++cnt; + } + } + + return cnt; + } } diff --git a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java index 6a23c8de..13cc2dea 100644 --- a/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java +++ b/src/services/modules/ldap/src/main/java/org/geoserver/geofence/ldap/utils/LdapUtils.java @@ -8,8 +8,6 @@ import org.springframework.ldap.core.AttributesMapper; -import com.googlecode.genericdao.search.Filter; - import org.apache.log4j.LogManager; import org.apache.log4j.Logger; @@ -20,28 +18,12 @@ public class LdapUtils { private static Logger LOGGER = LogManager.getLogger(LdapUtils.class); - - /** - * Creates and LDAP filter from the DAO search filter. Currently only "property = value" filters are supported. - * - * @param filter - * @return - */ - public static String createLDAPFilter(Filter filter, AttributesMapper mapper) + public static String createLDAPFilterEqual(String propertyName, String value, AttributesMapper mapper) { - // TODO add other filter types - if (filter.getOperator() == Filter.OP_EQUAL) { - String propertyName = filter.getProperty(); - if (mapper instanceof LdapAttributesMapper) { - propertyName = ((LdapAttributesMapper) mapper) - .getLdapAttribute(propertyName); - } - return propertyName + "=" + filter.getValue().toString(); - } else { - LOGGER.error("MISSING IMPLEMENTATION FOR " + filter); + if (mapper instanceof LdapAttributesMapper) { + propertyName = ((LdapAttributesMapper) mapper) + .getLdapAttribute(propertyName); } - return null; + return propertyName + "=" + value; } - - } diff --git a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java index 2cf67410..b1c62438 100644 --- a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java +++ b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/BaseDAOTest.java @@ -1,17 +1,27 @@ -/* (c) 2014 - 2017 Open Source Geospatial Foundation - all rights reserved +/* (c) 2014 - 2020 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ - package org.geoserver.geofence.ldap.dao.impl; +import org.apache.directory.api.ldap.model.entry.DefaultEntry; +import org.apache.directory.api.ldap.model.ldif.LdifEntry; +import org.apache.directory.api.ldap.model.ldif.LdifReader; +import org.apache.directory.api.ldap.model.schema.SchemaManager; +import org.apache.directory.server.annotations.CreateLdapServer; +import org.apache.directory.server.annotations.CreateTransport; +import org.apache.directory.server.core.annotations.CreateDS; +import org.apache.directory.server.core.annotations.CreatePartition; +import org.apache.directory.server.core.api.DirectoryService; +import org.apache.directory.server.core.factory.DSAnnotationProcessor; +import org.apache.directory.server.core.integ.FrameworkRunner; +import org.apache.directory.server.factory.ServerAnnotationProcessor; +import org.apache.directory.server.ldap.LdapServer; + import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; -import org.springframework.ldap.core.LdapTemplate; -import org.springframework.ldap.core.support.LdapContextSource; import org.springframework.ldap.test.LdapTestUtils; -import org.springframework.ldap.support.LdapUtils; import org.geoserver.geofence.core.dao.GSUserDAO; import org.geoserver.geofence.core.dao.UserGroupDAO; @@ -26,90 +36,83 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; +import org.junit.runner.RunWith; /** * * @author ETj (etj at geo-solutions.it) */ -public abstract class BaseDAOTest -{ - protected final Logger LOGGER; +@RunWith(FrameworkRunner.class) +public abstract class BaseDAOTest { + + protected static Logger LOGGER; protected static GSUserDAO userDAO; protected static UserGroupDAO userGroupDAO; protected static ClassPathXmlApplicationContext ctx = null; - @Rule - public TestName name = new TestName(); + @Rule + public TestName name = new TestName(); - public BaseDAOTest() - { + public BaseDAOTest() { LOGGER = LogManager.getLogger(getClass()); synchronized (BaseDAOTest.class) { if (ctx == null) { String[] paths = { - "classpath*:applicationContext.xml", -// "applicationContext.xml", -// "applicationContext-geofence-ldap.xml" -// ,"applicationContext-test.xml" - }; + "classpath*:applicationContext.xml",}; ctx = new ClassPathXmlApplicationContext(paths); userDAO = (GSUserDAO) ctx.getBean("gsUserDAO_LDAP"); userGroupDAO = (UserGroupDAO) ctx.getBean("userGroupDAO_LDAP"); } - } } @BeforeClass - public static void setUpClass() throws Exception - { - // Start an LDAP server and import test data -// LdapTestUtils.startEmbeddedServer(10389, "", "test"); -// LdapTestUtils.startEmbeddedServer(10389, "dc=example,dc=com", "test"); - LdapTestUtils.startEmbeddedServer(10389, "dc=com", "test"); - loadData(); + @CreateLdapServer(name = "DSAlias", // + transports = {@CreateTransport(protocol = "LDAP", port = 10389)}, // + allowAnonymousAccess = true) + @CreateDS(name = "test", // + partitions = @CreatePartition(name = "example_com", suffix = "dc=example,dc=com"), // + allowAnonAccess = true) + public static void setUpClass() throws Exception { + + Logger logger = LogManager.getLogger(BaseDAOTest.class); + + DirectoryService directoryService = DSAnnotationProcessor.getDirectoryService(); + final SchemaManager schemaManager = directoryService.getSchemaManager(); + LdapServer ldapServer = ServerAnnotationProcessor.getLdapServer(directoryService); + + logger.info("Creating test entries..."); + + ClassPathResource ldif = new ClassPathResource("data.ldif"); + int entries = 0; + for (LdifEntry ldifEntry : new LdifReader(ldif.getInputStream())) { + + DefaultEntry entry = new DefaultEntry(schemaManager, ldifEntry.getEntry()); + directoryService.getAdminSession().add(entry); + ++entries; + + } + logger.info("Created " +entries + " entries "); } @AfterClass - public static void tearDownClass() throws Exception - { + public static void tearDownClass() throws Exception { LdapTestUtils.shutdownEmbeddedServer(); } @Before - public void setUp() throws Exception - { - LOGGER.info("################ Setting up -- " + getClass().getSimpleName() + ":: " + name.getMethodName() ); + public void setUp() throws Exception { +// LOGGER.info("################ Setting up -- " + getClass().getSimpleName() + ":: " + name.getMethodName()); // loadData(); - LOGGER.info("##### Ending setup for " + getClass().getSimpleName() + " ###----------------------"); - } - - protected static void loadData() throws Exception - { - // Bind to the directory - LdapContextSource contextSource = new LdapContextSource(); - contextSource.setUrl("ldap://127.0.0.1:10389"); - contextSource.setUserDn("uid=admin,ou=system"); - contextSource.setPassword("secret"); - contextSource.setPooled(false); - //contextSource.setDirObjectFactory(null); - contextSource.afterPropertiesSet(); - - // Create the Sprint LDAP template - LdapTemplate template = new LdapTemplate(contextSource); - - // Clear out any old data - and load the test data - LdapTestUtils.clearSubContexts(contextSource, LdapUtils.newLdapName("dc=example,dc=com")); - LdapTestUtils.loadLdif(contextSource, new ClassPathResource("data.ldif")); +// LOGGER.info("##### Ending setup for " + getClass().getSimpleName() + " ###----------------------"); } @Test - public void testCheckDAOs() - { + public void testCheckDAOs() { assertNotNull(userDAO); assertTrue(userDAO instanceof GSUserDAOLdapImpl); } diff --git a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java index 1e9bc371..392c0b11 100644 --- a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java +++ b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/GSUserDAOLdapImplTest.java @@ -11,8 +11,6 @@ import org.junit.Test; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.Search; import java.util.HashSet; import java.util.Set; import org.geoserver.geofence.core.model.UserGroup; @@ -53,15 +51,13 @@ public void testGetFullByName() @Test public void testCount() { - assertTrue(userDAO.count(new Search()) > 0); + assertTrue(userDAO.countByNameLike(null) > 0); } @Test public void testSearch_admin() { - Search search = new Search(); - search.addFilter(new Filter("username", "admin")); - List users = userDAO.search(search); + List users = userDAO.search("admin", null, null, true); assertTrue(users.size() > 0); GSUser user = users.get(0); assertTrue(user.getName().length() > 0); @@ -70,18 +66,13 @@ public void testSearch_admin() @Test public void testSearchPagination() { - Search search = new Search(); - List users = userDAO.search(search); + List users = userDAO.search(null, null, null, true); assertEquals(4, users.size()); - search.setPage(0); - search.setMaxResults(3); - users = userDAO.search(search); + users = userDAO.search(null, 0, 3, true); assertEquals(3, users.size()); - search.setPage(1); - search.setMaxResults(3); - users = userDAO.search(search); + users = userDAO.search(null, 1, 3, true); assertEquals(1, users.size()); } @@ -89,12 +80,10 @@ public void testSearchPagination() @Test public void testSearch_groups() { - Search search = new Search(); - search.addFilter(new Filter("username", "destination1")); - List users = userDAO.search(search); - assertTrue(users.size() == 1); + List users = userDAO.search("destination1", null, null, true); + assertEquals(1, users.size()); GSUser user = users.get(0); - assertTrue(user.getName().equals("destination1")); + assertEquals("destination1", user.getName()); } @Test diff --git a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java index cdfc792c..6a365aef 100644 --- a/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java +++ b/src/services/modules/ldap/src/test/java/org/geoserver/geofence/ldap/dao/impl/UserGroupDAOLdapImplTest.java @@ -11,9 +11,6 @@ import org.junit.Test; -import com.googlecode.genericdao.search.Filter; -import com.googlecode.genericdao.search.Search; - import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -53,41 +50,32 @@ public void testFind() @Test public void testSearch() { - Search search = new Search(); - search.addFilter(new Filter("groupname", "adminGroup")); + assertNotNull(userGroupDAO.get("adminGroup")); - List groups = userGroupDAO.search(search); - assertTrue(groups.size() == 1); - UserGroup group = groups.get(0); - assertEquals("adminGroup", group.getName()); + List groups = userGroupDAO.search("adminGroup", null, null); + assertEquals(1, groups.size()); + assertEquals("adminGroup", groups.get(0).getName()); } @Test public void testCount() { - assertEquals(5, userGroupDAO.count(new Search())); + assertEquals(5, userGroupDAO.countByNameLike(null)); } @Test public void testSearchPagination() { - Search search = new Search(); - List groups = userGroupDAO.search(search); + List groups = userGroupDAO.search(null, null, null); assertEquals(5, groups.size()); - search.setPage(0); - search.setMaxResults(2); - groups = userGroupDAO.search(search); + groups = userGroupDAO.search(null, 0,2); assertEquals(2, groups.size()); - search.setPage(1); - search.setMaxResults(2); - groups = userGroupDAO.search(search); + groups = userGroupDAO.search(null, 1, 2); assertEquals(2, groups.size()); - search.setPage(2); - search.setMaxResults(2); - groups = userGroupDAO.search(search); + groups = userGroupDAO.search(null, 2, 2); assertEquals(1, groups.size()); } } diff --git a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java index 8e96934d..5bca9b53 100644 --- a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java +++ b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/BaseRESTServiceImpl.java @@ -63,7 +63,7 @@ protected GSUser getUser(IdName userFilter) throws BadRequestRestEx, NotFoundRes if (userFilter.getId() != null) { throw new BadRequestRestEx("Users can only be referenced by name"); } else if (userFilter.getName() != null) { - return userAdminService.get(userFilter.getName()); + return userAdminService.getFull(userFilter.getName()); } else { throw new BadRequestRestEx("Bad GSUser filter " + userFilter); } diff --git a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java index 53e62b5c..3033f9ff 100644 --- a/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java +++ b/src/services/modules/rest/impl/src/main/java/org/geoserver/geofence/services/rest/impl/RESTUserServiceImpl.java @@ -63,7 +63,7 @@ public Response delete(String username, boolean cascade) throws ConflictRestEx, } } - GSUser user = userAdminService.get(username); // may throw NotFoundServiceEx + GSUser user = userAdminService.getFull(username); // may throw NotFoundServiceEx if ( ! userAdminService.delete(user.getId())) { LOGGER.warn("ILLEGAL STATE -- User not found: " + user); // this should not happen @@ -104,7 +104,7 @@ public Response insert(RESTInputUser user) throws BadRequestRestEx, NotFoundRest boolean exists; // check that no user with same name exists try { - userAdminService.get(user.getName()); + userAdminService.getFull(user.getName()); exists = true; } catch (NotFoundServiceEx ex) { // well, ok, user does not exist @@ -121,7 +121,7 @@ public Response insert(RESTInputUser user) throws BadRequestRestEx, NotFoundRest try { - Set groups = new HashSet(); + Set groups = new HashSet<>(); // resolve groups List inputGroups = user.getGroups(); if ( inputGroups == null || inputGroups.isEmpty() ) { @@ -169,7 +169,7 @@ public Response insert(RESTInputUser user) throws BadRequestRestEx, NotFoundRest @Override public void update(String name, RESTInputUser user) throws BadRequestRestEx, NotFoundRestEx, InternalErrorRestEx { try { - GSUser old = userAdminService.get(name); + GSUser old = userAdminService.getFull(name); update(old.getId(), user); } catch (NotFoundServiceEx ex) { LOGGER.warn("User not found: " + name); diff --git a/src/services/pom.xml b/src/services/pom.xml index 44b6f12e..57e673b5 100644 --- a/src/services/pom.xml +++ b/src/services/pom.xml @@ -554,7 +554,7 @@ junit junit - 4.12 + 4.13 test @@ -780,7 +780,8 @@ 11 true - UTF-8 + UTF-8 + true