Repository: syncope Updated Branches: refs/heads/2_0_X 6b3ace024 -> c306a3bf9 refs/heads/master 883911633 -> 81515d7e2
[SYNCOPE-1193] Now read, update and delete works both with key and (user)name for Users, Groups and Any Objects Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/c306a3bf Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/c306a3bf Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/c306a3bf Branch: refs/heads/2_0_X Commit: c306a3bf9bbdb47712f5db7ec318b7aa6f4a7c4f Parents: 6b3ace0 Author: Francesco Chicchiriccò <ilgro...@apache.org> Authored: Fri Aug 11 16:06:42 2017 +0200 Committer: Francesco Chicchiriccò <ilgro...@apache.org> Committed: Fri Aug 11 16:06:42 2017 +0200 ---------------------------------------------------------------------- .../common/rest/api/service/AnyService.java | 12 ++--- .../syncope/core/logic/AbstractAnyLogic.java | 3 -- .../syncope/core/logic/AnyObjectLogic.java | 13 ------ .../apache/syncope/core/logic/GroupLogic.java | 11 ----- .../apache/syncope/core/logic/UserLogic.java | 12 ----- .../core/persistence/api/dao/AnyDAO.java | 2 + .../core/persistence/api/dao/AnyObjectDAO.java | 2 - .../core/persistence/api/dao/GroupDAO.java | 2 - .../core/persistence/api/dao/UserDAO.java | 2 - .../persistence/jpa/dao/AbstractAnyDAO.java | 17 +++++++ .../persistence/jpa/dao/JPAAnyObjectDAO.java | 24 +++------- .../core/persistence/jpa/dao/JPAGroupDAO.java | 24 +++------- .../core/persistence/jpa/dao/JPAUserDAO.java | 25 +++------- .../provisioning/api/data/UserDataBinder.java | 2 - .../java/data/AnyObjectDataBinderImpl.java | 5 +- .../java/data/GroupDataBinderImpl.java | 5 +- .../java/data/UserDataBinderImpl.java | 11 +---- .../rest/cxf/service/AbstractAnyService.java | 49 ++++++++++++++++---- .../rest/cxf/service/AnyObjectServiceImpl.java | 10 ++++ .../core/rest/cxf/service/GroupServiceImpl.java | 10 ++++ .../core/rest/cxf/service/UserServiceImpl.java | 12 ++++- .../apache/syncope/core/logic/SAML2SPLogic.java | 4 +- .../core/logic/saml2/SAML2ReaderWriter.java | 2 +- fit/core-reference/pom.xml | 2 - .../apache/syncope/fit/core/SAML2ITCase.java | 20 ++++---- .../org/apache/syncope/fit/core/UserITCase.java | 11 +++++ pom.xml | 8 +++- 27 files changed, 151 insertions(+), 149 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java index d288e59..ac2fc20 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyService.java @@ -50,7 +50,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS * Note that for the UserService, GroupService and AnyObjectService subclasses, if the key parameter * looks like a UUID then it is interpreted as as key, otherwise as a (user)name. * - * @param key any object key + * @param key any object key or name * @param schemaType schema type * @return list of attributes, owned by the given any object, for the given schema type */ @@ -65,7 +65,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS * Note that for the UserService, GroupService and AnyObjectService subclasses, if the key parameter * looks like a UUID then it is interpreted as as key, otherwise as a (user)name. * - * @param key any object key + * @param key any object key or name * @param schemaType schema type * @param schema schema * @return attribute, owned by the given any object, for the given schema type and schema @@ -84,7 +84,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS * Note that for the UserService, GroupService and AnyObjectService subclasses, if the key parameter * looks like a UUID then it is interpreted as as key, otherwise as a (user)name. * - * @param key key of any object to be read + * @param key any object key or name * @return any object with matching key */ @GET @@ -130,7 +130,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS /** * Adds or replaces the attribute, owned by the given any object, for the given schema type and schema. * - * @param key any object key + * @param key any object key or name * @param schemaType schema type * @param attrTO attribute * @return Response object featuring the updated any object attribute - as Entity @@ -160,7 +160,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS /** * Deletes the attribute, owned by the given any object, for the given schema type and schema. * - * @param key any object key + * @param key any object key or name * @param schemaType schema type * @param schema schema */ @@ -176,7 +176,7 @@ public interface AnyService<TO extends AnyTO, P extends AnyPatch> extends JAXRSS /** * Deletes any object matching provided key. * - * @param key key of any object to be deleted + * @param key any object key or name * @return Response object featuring the deleted any object enriched with propagation status information * - ProvisioningResult as Entity */ http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java index 9755e1f..fd7e5f2 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AbstractAnyLogic.java @@ -19,7 +19,6 @@ package org.apache.syncope.core.logic; import java.util.ArrayList; -import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -259,8 +258,6 @@ public abstract class AbstractAnyLogic<TO extends AnyTO, P extends AnyPatch> ext return IterableUtils.matchesAny(effectiveRealms, new RealmUtils.DynRealmsPredicate()); } - public abstract Date findLastChange(String key); - public abstract TO read(String key); public abstract ProvisioningResult<TO> create(TO anyTO, boolean nullPriorityAsync); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java index 8cab1aa..e5621be 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyObjectLogic.java @@ -21,7 +21,6 @@ package org.apache.syncope.core.logic; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -41,7 +40,6 @@ import org.apache.syncope.common.lib.types.AnyTypeKind; import org.apache.syncope.common.lib.types.ClientExceptionType; import org.apache.syncope.common.lib.types.PatchOperation; import org.apache.syncope.core.persistence.api.dao.AnySearchDAO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.dao.search.OrderByClause; import org.apache.syncope.core.persistence.api.dao.search.SearchCond; import org.apache.syncope.core.persistence.api.entity.AnyType; @@ -73,17 +71,6 @@ public class AnyObjectLogic extends AbstractAnyLogic<AnyObjectTO, AnyObjectPatch @Transactional(readOnly = true) @Override - public Date findLastChange(final String key) { - Date etag = anyObjectDAO.findLastChange(key); - if (etag == null) { - throw new NotFoundException("AnyObject " + key); - } - - return etag; - } - - @Transactional(readOnly = true) - @Override public AnyObjectTO read(final String key) { return binder.getAnyObjectTO(key); } http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java index 8098de0..898113d 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java @@ -127,17 +127,6 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO, GroupPatch> { return IterableUtils.matchesAny(effectiveRealms, new RealmUtils.DynRealmsPredicate()); } - @Transactional(readOnly = true) - @Override - public Date findLastChange(final String key) { - Date etag = groupDAO.findLastChange(key); - if (etag == null) { - throw new NotFoundException("Group " + key); - } - - return etag; - } - @PreAuthorize("hasRole('" + StandardEntitlement.GROUP_READ + "')") @Transactional(readOnly = true) @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java ---------------------------------------------------------------------- diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java index ffca88b..f889780 100644 --- a/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java +++ b/core/logic/src/main/java/org/apache/syncope/core/logic/UserLogic.java @@ -22,7 +22,6 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -81,17 +80,6 @@ public class UserLogic extends AbstractAnyLogic<UserTO, UserPatch> { @Autowired protected SyncopeLogic syncopeLogic; - @Transactional(readOnly = true) - @Override - public Date findLastChange(final String key) { - Date etag = userDAO.findLastChange(key); - if (etag == null) { - throw new NotFoundException("User " + key); - } - - return etag; - } - @PreAuthorize("isAuthenticated()") @Transactional(readOnly = true) public Pair<String, UserTO> selfRead() { http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java index 60f865f..3415377 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyDAO.java @@ -31,6 +31,8 @@ public interface AnyDAO<A extends Any<?>> extends DAO<A> { int DEFAULT_PAGE_SIZE = 10; + String findKey(String name); + Date findLastChange(String key); A authFind(String key); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java index 6368da5..3749440 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/AnyObjectDAO.java @@ -41,8 +41,6 @@ public interface AnyObjectDAO extends AnyDAO<AnyObject> { AnyObject findByName(String name); - AnyObject authFindByName(String name); - List<Group> findDynGroups(String key); List<ARelationship> findAllRelationships(AnyObject anyObject); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java index 04ff490..580fe32 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java @@ -34,8 +34,6 @@ public interface GroupDAO extends AnyDAO<Group> { Group findByName(String name); - Group authFindByName(String name); - List<Group> findOwnedByUser(String userKey); List<Group> findOwnedByGroup(String groupKey); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java index 92ba692..7f1932a 100644 --- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java +++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java @@ -34,8 +34,6 @@ public interface UserDAO extends AnyDAO<User> { Map<String, Integer> countByStatus(); - User authFindByUsername(String username); - User findByUsername(String username); User findByToken(String token); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java index 6ef6826..15b79da 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractAnyDAO.java @@ -63,6 +63,7 @@ import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource; import org.apache.syncope.core.persistence.api.entity.user.UMembership; import org.apache.syncope.core.persistence.api.entity.user.User; import org.apache.syncope.core.persistence.jpa.entity.AbstractPlainAttrValue; +import org.apache.syncope.core.persistence.jpa.entity.user.JPAUser; import org.apache.syncope.core.spring.ApplicationContextProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; @@ -120,6 +121,22 @@ public abstract class AbstractAnyDAO<A extends Any<?>> extends AbstractDAO<A> im return anyUtils; } + protected String findKey(final String name, final String table) { + Query query = entityManager().createNativeQuery( + "SELECT id FROM " + table + " WHERE " + (JPAUser.TABLE.equals(table) ? "username" : "name") + "=?"); + query.setParameter(1, name); + + String key = null; + + for (Object resultKey : query.getResultList()) { + key = resultKey instanceof Object[] + ? (String) ((Object[]) resultKey)[0] + : ((String) resultKey); + } + + return key; + } + protected Date findLastChange(final String key, final String table) { Query query = entityManager().createNativeQuery( "SELECT creationDate, lastChangeDate FROM " + table + " WHERE id=?"); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java index 046d9ea..32c655c 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyObjectDAO.java @@ -43,7 +43,6 @@ import org.apache.syncope.core.spring.security.DelegatedAdministrationException; import org.apache.syncope.core.provisioning.api.utils.EntityUtils; import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO; import org.apache.syncope.core.persistence.api.dao.GroupDAO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.apache.syncope.core.persistence.api.entity.AnyType; import org.apache.syncope.core.persistence.api.entity.AnyUtils; @@ -95,6 +94,13 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj return new JPAAnyUtilsFactory().getInstance(AnyTypeKind.ANY_OBJECT); } + @Transactional(readOnly = true) + @Override + public String findKey(final String username) { + return findKey(username, JPAAnyObject.TABLE); + } + + @Transactional(readOnly = true) @Override public Date findLastChange(final String key) { return findLastChange(key, JPAAnyObject.TABLE); @@ -170,22 +176,6 @@ public class JPAAnyObjectDAO extends AbstractAnyDAO<AnyObject> implements AnyObj } @Override - public AnyObject authFindByName(final String name) { - if (name == null) { - throw new NotFoundException("Null name"); - } - - AnyObject anyObject = findByName(name); - if (anyObject == null) { - throw new NotFoundException("Any Object " + name); - } - - securityChecks(anyObject); - - return anyObject; - } - - @Override public List<ARelationship> findAllRelationships(final AnyObject anyObject) { TypedQuery<ARelationship> query = entityManager().createQuery( "SELECT e FROM " + JPAARelationship.class.getSimpleName() http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java index 9d28074..dca8d69 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAGroupDAO.java @@ -46,7 +46,6 @@ import org.apache.syncope.core.spring.security.AuthContextUtils; import org.apache.syncope.core.spring.security.DelegatedAdministrationException; import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO; import org.apache.syncope.core.persistence.api.dao.AnySearchDAO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO; import org.apache.syncope.core.persistence.api.dao.search.AssignableCond; import org.apache.syncope.core.persistence.api.dao.search.SearchCond; @@ -142,6 +141,13 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO { return new JPAAnyUtilsFactory().getInstance(AnyTypeKind.GROUP); } + @Transactional(readOnly = true) + @Override + public String findKey(final String username) { + return findKey(username, JPAGroup.TABLE); + } + + @Transactional(readOnly = true) @Override public Date findLastChange(final String key) { return findLastChange(key, JPAGroup.TABLE); @@ -207,22 +213,6 @@ public class JPAGroupDAO extends AbstractAnyDAO<Group> implements GroupDAO { return result; } - @Override - public Group authFindByName(final String name) { - if (name == null) { - throw new NotFoundException("Null name"); - } - - Group group = findByName(name); - if (group == null) { - throw new NotFoundException("Group " + name); - } - - securityChecks(group); - - return group; - } - @Transactional(readOnly = true) @Override public List<Group> findOwnedByUser(final String userKey) { http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java ---------------------------------------------------------------------- diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java index 7523681..e1bfaf1 100644 --- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java +++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAUserDAO.java @@ -55,7 +55,6 @@ import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidEntit import org.apache.syncope.core.persistence.api.dao.AccessTokenDAO; import org.apache.syncope.core.persistence.api.dao.AccountRule; import org.apache.syncope.core.persistence.api.dao.GroupDAO; -import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.dao.PasswordRule; import org.apache.syncope.core.persistence.api.dao.RealmDAO; import org.apache.syncope.core.persistence.api.dao.RoleDAO; @@ -130,6 +129,13 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO { return new JPAAnyUtilsFactory().getInstance(AnyTypeKind.USER); } + @Transactional(readOnly = true) + @Override + public String findKey(final String username) { + return findKey(username, JPAUser.TABLE); + } + + @Transactional(readOnly = true) @Override public Date findLastChange(final String key) { return findLastChange(key, JPAUser.TABLE); @@ -198,23 +204,6 @@ public class JPAUserDAO extends AbstractAnyDAO<User> implements UserDAO { } } - @Transactional(readOnly = true) - @Override - public User authFindByUsername(final String username) { - if (username == null) { - throw new NotFoundException("Null username"); - } - - User user = findByUsername(username); - if (user == null) { - throw new NotFoundException("User " + username); - } - - securityChecks(user); - - return user; - } - @Override public User findByUsername(final String username) { TypedQuery<User> query = entityManager().createQuery("SELECT e FROM " + JPAUser.class.getSimpleName() http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java ---------------------------------------------------------------------- diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java index 3b0c449..3f55a23 100644 --- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java +++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/UserDataBinder.java @@ -45,7 +45,5 @@ public interface UserDataBinder { */ PropagationByResource update(User toBeUpdated, UserPatch userPatch); - boolean verifyPassword(String username, String password); - boolean verifyPassword(User user, String password); } http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java index 501ebf4..d2d7314 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java @@ -29,7 +29,6 @@ import org.apache.commons.collections4.Transformer; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.SyncopeClientCompositeException; import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.patch.AnyObjectPatch; import org.apache.syncope.common.lib.patch.AttrPatch; import org.apache.syncope.common.lib.patch.MembershipPatch; @@ -78,9 +77,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An @Transactional(readOnly = true) @Override public AnyObjectTO getAnyObjectTO(final String key) { - return SyncopeConstants.UUID_PATTERN.matcher(key).matches() - ? getAnyObjectTO(anyObjectDAO.authFind(key), true) - : getAnyObjectTO(anyObjectDAO.authFindByName(key), true); + return getAnyObjectTO(anyObjectDAO.authFind(key), true); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java index 467874d..787353c 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/GroupDataBinderImpl.java @@ -28,7 +28,6 @@ import org.apache.commons.collections4.Transformer; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.SyncopeClientCompositeException; import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.patch.GroupPatch; import org.apache.syncope.common.lib.to.GroupTO; import org.apache.syncope.common.lib.to.TypeExtensionTO; @@ -383,9 +382,7 @@ public class GroupDataBinderImpl extends AbstractAnyDataBinder implements GroupD @Transactional(readOnly = true) @Override public GroupTO getGroupTO(final String key) { - return SyncopeConstants.UUID_PATTERN.matcher(key).matches() - ? getGroupTO(groupDAO.authFind(key), true) - : getGroupTO(groupDAO.authFindByName(key), true); + return getGroupTO(groupDAO.authFind(key), true); } private void populateTransitiveResources( http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java ---------------------------------------------------------------------- diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java index 3721371..fa9fa5f 100644 --- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java +++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java @@ -33,7 +33,6 @@ import org.apache.commons.collections4.Transformer; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.SyncopeClientCompositeException; import org.apache.syncope.common.lib.SyncopeClientException; -import org.apache.syncope.common.lib.SyncopeConstants; import org.apache.syncope.common.lib.patch.AttrPatch; import org.apache.syncope.common.lib.patch.MembershipPatch; import org.apache.syncope.common.lib.patch.PasswordPatch; @@ -146,12 +145,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat @Transactional(readOnly = true) @Override - public boolean verifyPassword(final String username, final String password) { - return verifyPassword(userDAO.authFindByUsername(username), password); - } - - @Transactional(readOnly = true) - @Override public boolean verifyPassword(final User user, final String password) { return ENCRYPTOR.verify(password, user.getCipherAlgorithm(), user.getPassword()); } @@ -636,9 +629,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat @Transactional(readOnly = true) @Override public UserTO getUserTO(final String key) { - return SyncopeConstants.UUID_PATTERN.matcher(key).matches() - ? getUserTO(userDAO.authFind(key), true) - : getUserTO(userDAO.authFindByUsername(key), true); + return getUserTO(userDAO.authFind(key), true); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java index 2cc2413..1b7e7f2 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AbstractAnyService.java @@ -51,6 +51,7 @@ import org.apache.syncope.common.rest.api.beans.AnyQuery; import org.apache.syncope.common.rest.api.service.AnyService; import org.apache.syncope.core.logic.AbstractAnyLogic; import org.apache.syncope.core.logic.UserLogic; +import org.apache.syncope.core.persistence.api.dao.AnyDAO; import org.apache.syncope.core.persistence.api.dao.NotFoundException; import org.apache.syncope.core.persistence.api.dao.search.SearchCond; @@ -58,10 +59,24 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch> extends AbstractServiceImpl implements AnyService<TO, P> { + protected abstract AnyDAO<?> getAnyDAO(); + protected abstract AbstractAnyLogic<TO, P> getAnyLogic(); protected abstract P newPatch(String key); + private String getActualKey(final String key) { + String actualKey = key; + if (!SyncopeConstants.UUID_PATTERN.matcher(key).matches()) { + actualKey = getAnyDAO().findKey(key); + if (actualKey == null) { + throw new NotFoundException("User, Group or Any Object for " + key); + } + } + + return actualKey; + } + @Override public Set<AttrTO> read(final String key, final SchemaType schemaType) { TO any = read(key); @@ -110,7 +125,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch> @Override public TO read(final String key) { - return getAnyLogic().read(key); + return getAnyLogic().read(getActualKey(key)); } @Override @@ -143,9 +158,19 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch> return createResponse(created); } + protected Date findLastChange(final String key) { + Date lastChange = getAnyDAO().findLastChange(key); + if (lastChange == null) { + throw new NotFoundException("User, Group or Any Object for " + key); + } + + return lastChange; + } + @Override public Response update(final P anyPatch) { - Date etagDate = getAnyLogic().findLastChange(anyPatch.getKey()); + anyPatch.setKey(getActualKey(anyPatch.getKey())); + Date etagDate = findLastChange(anyPatch.getKey()); checkETag(String.valueOf(etagDate.getTime())); ProvisioningResult<TO> updated = getAnyLogic().update(anyPatch, isNullPriorityAsync()); @@ -179,12 +204,14 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch> @Override public Response update(final String key, final SchemaType schemaType, final AttrTO attrTO) { - addUpdateOrReplaceAttr(key, schemaType, attrTO, PatchOperation.ADD_REPLACE); - return modificationResponse(read(key, schemaType, attrTO.getSchema())); + String actualKey = getActualKey(key); + addUpdateOrReplaceAttr(actualKey, schemaType, attrTO, PatchOperation.ADD_REPLACE); + return modificationResponse(read(actualKey, schemaType, attrTO.getSchema())); } @Override public Response update(final TO anyTO) { + anyTO.setKey(getActualKey(anyTO.getKey())); TO before = getAnyLogic().read(anyTO.getKey()); checkETag(before.getETagValue()); @@ -196,21 +223,25 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch> @Override public void delete(final String key, final SchemaType schemaType, final String schema) { - addUpdateOrReplaceAttr(key, schemaType, new AttrTO.Builder().schema(schema).build(), PatchOperation.DELETE); + String actualKey = getActualKey(key); + addUpdateOrReplaceAttr( + actualKey, schemaType, new AttrTO.Builder().schema(schema).build(), PatchOperation.DELETE); } @Override public Response delete(final String key) { - Date etagDate = getAnyLogic().findLastChange(key); + String actualKey = getActualKey(key); + + Date etagDate = findLastChange(actualKey); checkETag(String.valueOf(etagDate.getTime())); - ProvisioningResult<TO> deleted = getAnyLogic().delete(key, isNullPriorityAsync()); + ProvisioningResult<TO> deleted = getAnyLogic().delete(actualKey, isNullPriorityAsync()); return modificationResponse(deleted); } @Override public Response deassociate(final DeassociationPatch patch) { - Date etagDate = getAnyLogic().findLastChange(patch.getKey()); + Date etagDate = findLastChange(patch.getKey()); checkETag(String.valueOf(etagDate.getTime())); ProvisioningResult<TO> updated; @@ -254,7 +285,7 @@ public abstract class AbstractAnyService<TO extends AnyTO, P extends AnyPatch> @Override public Response associate(final AssociationPatch patch) { - Date etagDate = getAnyLogic().findLastChange(patch.getKey()); + Date etagDate = findLastChange(patch.getKey()); checkETag(String.valueOf(etagDate.getTime())); ProvisioningResult<TO> updated; http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java index ba7334b..cf17f80 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/AnyObjectServiceImpl.java @@ -29,6 +29,8 @@ import org.apache.syncope.common.rest.api.beans.AnyQuery; import org.apache.syncope.common.rest.api.service.AnyObjectService; import org.apache.syncope.core.logic.AbstractAnyLogic; import org.apache.syncope.core.logic.AnyObjectLogic; +import org.apache.syncope.core.persistence.api.dao.AnyDAO; +import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -36,9 +38,17 @@ import org.springframework.stereotype.Service; public class AnyObjectServiceImpl extends AbstractAnyService<AnyObjectTO, AnyObjectPatch> implements AnyObjectService { @Autowired + private AnyObjectDAO anyObjectDAO; + + @Autowired private AnyObjectLogic logic; @Override + protected AnyDAO<?> getAnyDAO() { + return anyObjectDAO; + } + + @Override protected AbstractAnyLogic<AnyObjectTO, AnyObjectPatch> getAnyLogic() { return logic; } http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java index 50ef081..94c41c4 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/GroupServiceImpl.java @@ -26,6 +26,8 @@ import org.apache.syncope.common.lib.types.BulkMembersActionType; import org.apache.syncope.common.rest.api.service.GroupService; import org.apache.syncope.core.logic.AbstractAnyLogic; import org.apache.syncope.core.logic.GroupLogic; +import org.apache.syncope.core.persistence.api.dao.AnyDAO; +import org.apache.syncope.core.persistence.api.dao.GroupDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -33,9 +35,17 @@ import org.springframework.stereotype.Service; public class GroupServiceImpl extends AbstractAnyService<GroupTO, GroupPatch> implements GroupService { @Autowired + private GroupDAO groupDAO; + + @Autowired private GroupLogic logic; @Override + protected AnyDAO<?> getAnyDAO() { + return groupDAO; + } + + @Override protected AbstractAnyLogic<GroupTO, GroupPatch> getAnyLogic() { return logic; } http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java ---------------------------------------------------------------------- diff --git a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java index b8a6feb..90c706a 100644 --- a/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java +++ b/core/rest-cxf/src/main/java/org/apache/syncope/core/rest/cxf/service/UserServiceImpl.java @@ -27,6 +27,8 @@ import org.apache.syncope.common.lib.to.UserTO; import org.apache.syncope.common.rest.api.service.UserService; import org.apache.syncope.core.logic.AbstractAnyLogic; import org.apache.syncope.core.logic.UserLogic; +import org.apache.syncope.core.persistence.api.dao.AnyDAO; +import org.apache.syncope.core.persistence.api.dao.UserDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,9 +36,17 @@ import org.springframework.stereotype.Service; public class UserServiceImpl extends AbstractAnyService<UserTO, UserPatch> implements UserService { @Autowired + private UserDAO userDAO; + + @Autowired private UserLogic logic; @Override + protected AnyDAO<?> getAnyDAO() { + return userDAO; + } + + @Override protected AbstractAnyLogic<UserTO, UserPatch> getAnyLogic() { return logic; } @@ -56,7 +66,7 @@ public class UserServiceImpl extends AbstractAnyService<UserTO, UserPatch> imple @Override public Response status(final StatusPatch statusPatch) { - Date etagDate = getAnyLogic().findLastChange(statusPatch.getKey()); + Date etagDate = findLastChange(statusPatch.getKey()); checkETag(String.valueOf(etagDate.getTime())); ProvisioningResult<UserTO> updated = logic.status(statusPatch, isNullPriorityAsync()); http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java ---------------------------------------------------------------------- diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java index 0891f59..2264c64 100644 --- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java +++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/SAML2SPLogic.java @@ -398,7 +398,7 @@ public class SAML2SPLogic extends AbstractSAML2Logic<AbstractBaseBean> { NameID nameID = assertion.getSubject().getNameID(); String keyValue = null; if (StringUtils.isNotBlank(nameID.getValue()) - && idp.getConnObjectKeyItem().getExtAttrName().equals("NameID")) { + && idp.getConnObjectKeyItem().getExtAttrName().equals("NameID")) { keyValue = nameID.getValue(); } @@ -420,7 +420,7 @@ public class SAML2SPLogic extends AbstractSAML2Logic<AbstractBaseBean> { if (!attr.getAttributeValues().isEmpty()) { String attrName = attr.getFriendlyName() == null ? attr.getName() : attr.getFriendlyName(); if (attrName.equals(idp.getConnObjectKeyItem().getExtAttrName()) - && attr.getAttributeValues().get(0) instanceof XSString) { + && attr.getAttributeValues().get(0) instanceof XSString) { keyValue = ((XSString) attr.getAttributeValues().get(0)).getValue(); } http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2ReaderWriter.java ---------------------------------------------------------------------- diff --git a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2ReaderWriter.java b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2ReaderWriter.java index 9c1bcb2..25b2f63 100644 --- a/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2ReaderWriter.java +++ b/ext/saml2sp/logic/src/main/java/org/apache/syncope/core/logic/saml2/SAML2ReaderWriter.java @@ -224,7 +224,7 @@ public class SAML2ReaderWriter { ssoResponseValidator.setRequestId(requestId); ssoResponseValidator.setSpIdentifier(spEntityID); SSOValidatorResponse validatorResponse = - ssoResponseValidator.validateSamlResponse(samlResponse, idp.getBindingType() == SAML2BindingType.POST); + ssoResponseValidator.validateSamlResponse(samlResponse, idp.getBindingType() == SAML2BindingType.POST); if (LOG.isDebugEnabled()) { try { http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/fit/core-reference/pom.xml ---------------------------------------------------------------------- diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml index d28eb06..fd0ec8b 100644 --- a/fit/core-reference/pom.xml +++ b/fit/core-reference/pom.xml @@ -179,10 +179,8 @@ under the License. <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcpkix-jdk15on</artifactId> - <version>${bouncycastle.version}</version> <scope>test</scope> </dependency> - </dependencies> <build> http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java index 4ae8c8f..0170f51 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ITCase.java @@ -46,7 +46,6 @@ import java.util.Date; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.xml.namespace.QName; - import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections4.IterableUtils; import org.apache.commons.collections4.Predicate; @@ -104,7 +103,9 @@ import org.w3c.dom.Element; public class SAML2ITCase extends AbstractITCase { private static SyncopeClient anonymous; + private static Path keystorePath; + private static Path truststorePath; @BeforeClass @@ -179,15 +180,14 @@ public class SAML2ITCase extends AbstractITCase { // Get the signature QName signatureQName = new QName(SignatureConstants.XMLSIG_NS, "Signature"); Element signatureElement = - DOMUtils.getFirstChildWithName(responseDoc.getDocumentElement(), signatureQName); + DOMUtils.getFirstChildWithName(responseDoc.getDocumentElement(), signatureQName); assertNotNull(signatureElement); // Validate the signature XMLSignature signature = new XMLSignature(signatureElement, null); KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(Loader.getResourceAsStream("keystore"), "changeit".toCharArray()); - assertTrue(signature.checkSignatureValue((X509Certificate)keystore.getCertificate("sp"))); - + assertTrue(signature.checkSignatureValue((X509Certificate) keystore.getCertificate("sp"))); } catch (Exception e) { LOG.error("During SAML 2.0 SP metadata parsing", e); fail(e.getMessage()); @@ -464,16 +464,18 @@ public class SAML2ITCase extends AbstractITCase { String subjectName = "CN=Subject"; BigInteger serial = new BigInteger("123456"); X509v3CertificateBuilder certBuilder = - new X509v3CertificateBuilder(new X500Name(RFC4519Style.INSTANCE, issuerName), serial, currentDate, expiryDate, - new X500Name(RFC4519Style.INSTANCE, subjectName), - SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded())); + new X509v3CertificateBuilder(new X500Name(RFC4519Style.INSTANCE, issuerName), serial, currentDate, + expiryDate, + new X500Name(RFC4519Style.INSTANCE, subjectName), + SubjectPublicKeyInfo.getInstance(keyPair.getPublic().getEncoded())); ContentSigner contentSigner = new JcaContentSignerBuilder("SHA256WithRSAEncryption").build(keyPair.getPrivate()); X509Certificate certificate = new JcaX509CertificateConverter().getCertificate(certBuilder.build(contentSigner)); // Store Private Key + Certificate in Keystore KeyStore keystore = KeyStore.getInstance("JKS"); keystore.load(null, "security".toCharArray()); - keystore.setKeyEntry("subject", keyPair.getPrivate(), "security".toCharArray(), new Certificate[] {certificate}); + keystore.setKeyEntry("subject", keyPair.getPrivate(), "security".toCharArray(), + new Certificate[] { certificate }); File keystoreFile = File.createTempFile("samlkeystore", ".jks"); try (OutputStream output = Files.newOutputStream(keystoreFile.toPath())) { @@ -499,7 +501,7 @@ public class SAML2ITCase extends AbstractITCase { KeyStore keyStore = KeyStore.getInstance("JKS"); InputStream input = Files.newInputStream(truststorePath); keyStore.load(input, "security".toCharArray()); - X509Certificate cert = (X509Certificate)keyStore.getCertificate("subject"); + X509Certificate cert = (X509Certificate) keyStore.getCertificate("subject"); String certEncoded = java.util.Base64.getMimeEncoder().encodeToString(cert.getEncoded()); // Replace the "cert-placeholder" string in the metadata with the actual cert http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java ---------------------------------------------------------------------- diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java index bab61df..3b2aa3b 100644 --- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java +++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/UserITCase.java @@ -50,6 +50,7 @@ import org.apache.syncope.common.lib.patch.DeassociationPatch; import org.apache.syncope.common.lib.patch.MembershipPatch; import org.apache.syncope.common.lib.patch.PasswordPatch; import org.apache.syncope.common.lib.patch.StatusPatch; +import org.apache.syncope.common.lib.patch.StringReplacePatchItem; import org.apache.syncope.common.lib.patch.UserPatch; import org.apache.syncope.common.lib.policy.AccountPolicyTO; import org.apache.syncope.common.lib.policy.PasswordPolicyTO; @@ -567,6 +568,16 @@ public class UserITCase extends AbstractITCase { AttrTO fullNameAttr = userTO.getPlainAttr("fullname"); assertEquals(Collections.singletonList(newFullName), fullNameAttr.getValues()); + + // update by username + userPatch = new UserPatch(); + userPatch.setKey(userTO.getUsername()); + String newUsername = UUID.randomUUID().toString(); + userPatch.setUsername(new StringReplacePatchItem.Builder().value(newUsername).build()); + + userTO = updateUser(userPatch).getEntity(); + assertNotNull(userTO); + assertEquals(newUsername, userTO.getUsername()); } @Test http://git-wip-us.apache.org/repos/asf/syncope/blob/c306a3bf/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 004a8b5..94bf11c 100644 --- a/pom.xml +++ b/pom.xml @@ -356,8 +356,6 @@ under the License. <properties> <syncope.version>${project.version}</syncope.version> - <bouncycastle.version>1.57</bouncycastle.version> - <connid.version>1.4.3.0</connid.version> <connid.soap.version>1.4.1</connid.soap.version> <connid.rest.version>1.0.1</connid.rest.version> @@ -1671,6 +1669,12 @@ under the License. <scope>test</scope> </dependency> <dependency> + <groupId>org.bouncycastle</groupId> + <artifactId>bcpkix-jdk15on</artifactId> + <version>1.57</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version>