Search in sources :

Example 31 with AnyObjectTO

use of org.apache.syncope.common.lib.to.AnyObjectTO in project syncope by apache.

the class AnyObjectDataBinderImpl method getAnyObjectTO.

@Override
public AnyObjectTO getAnyObjectTO(final AnyObject anyObject, final boolean details) {
    AnyObjectTO anyObjectTO = new AnyObjectTO();
    anyObjectTO.setType(anyObject.getType().getKey());
    BeanUtils.copyProperties(anyObject, anyObjectTO, IGNORE_PROPERTIES);
    Map<VirSchema, List<String>> virAttrValues = details ? virAttrHandler.getValues(anyObject) : Collections.<VirSchema, List<String>>emptyMap();
    fillTO(anyObjectTO, anyObject.getRealm().getFullPath(), anyObject.getAuxClasses(), anyObject.getPlainAttrs(), derAttrHandler.getValues(anyObject), virAttrValues, anyObjectDAO.findAllResources(anyObject), details);
    if (details) {
        // dynamic realms
        anyObjectTO.getDynRealms().addAll(userDAO.findDynRealms(anyObject.getKey()));
        // relationships
        anyObjectTO.getRelationships().addAll(anyObjectDAO.findAllRelationships(anyObject).stream().map(relationship -> getRelationshipTO(relationship.getType().getKey(), relationship.getLeftEnd().getKey().equals(anyObject.getKey()) ? relationship.getRightEnd() : relationship.getLeftEnd())).collect(Collectors.toList()));
        // memberships
        anyObjectTO.getMemberships().addAll(anyObject.getMemberships().stream().map(membership -> {
            return getMembershipTO(anyObject.getPlainAttrs(membership), derAttrHandler.getValues(anyObject, membership), virAttrHandler.getValues(anyObject, membership), membership);
        }).collect(Collectors.toList()));
        // dynamic memberships
        anyObjectTO.getDynMemberships().addAll(anyObjectDAO.findDynGroups(anyObject.getKey()).stream().map(group -> {
            return new MembershipTO.Builder().group(group.getKey(), group.getName()).build();
        }).collect(Collectors.toList()));
    }
    return anyObjectTO;
}
Also used : AnyObjectTO(org.apache.syncope.common.lib.to.AnyObjectTO) VirSchema(org.apache.syncope.core.persistence.api.entity.VirSchema) List(java.util.List)

Example 32 with AnyObjectTO

use of org.apache.syncope.common.lib.to.AnyObjectTO in project syncope by apache.

the class ConnObjectUtils method getAnyPatch.

/**
 * Build {@link AnyPatch} out of connector object attributes and schema mapping.
 *
 * @param key any object to be updated
 * @param obj connector object
 * @param original any object to get diff from
 * @param pullTask pull task
 * @param provision provision information
 * @param anyUtils utils
 * @param <T> any object
 * @return modifications for the any object to be updated
 */
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public <T extends AnyPatch> T getAnyPatch(final String key, final ConnectorObject obj, final AnyTO original, final PullTask pullTask, final Provision provision, final AnyUtils anyUtils) {
    AnyTO updated = getAnyTOFromConnObject(obj, pullTask, provision, anyUtils);
    updated.setKey(key);
    T anyPatch = null;
    if (null != anyUtils.getAnyTypeKind()) {
        switch(anyUtils.getAnyTypeKind()) {
            case USER:
                UserTO originalUser = (UserTO) original;
                UserTO updatedUser = (UserTO) updated;
                if (StringUtils.isBlank(updatedUser.getUsername())) {
                    updatedUser.setUsername(originalUser.getUsername());
                }
                // update password if and only if password is really changed
                User user = userDAO.authFind(key);
                if (StringUtils.isBlank(updatedUser.getPassword()) || ENCRYPTOR.verify(updatedUser.getPassword(), user.getCipherAlgorithm(), user.getPassword())) {
                    updatedUser.setPassword(null);
                }
                updatedUser.setSecurityQuestion(updatedUser.getSecurityQuestion());
                updatedUser.setMustChangePassword(originalUser.isMustChangePassword());
                anyPatch = (T) AnyOperations.diff(updatedUser, originalUser, true);
                break;
            case GROUP:
                GroupTO originalGroup = (GroupTO) original;
                GroupTO updatedGroup = (GroupTO) updated;
                if (StringUtils.isBlank(updatedGroup.getName())) {
                    updatedGroup.setName(originalGroup.getName());
                }
                updatedGroup.setUserOwner(originalGroup.getUserOwner());
                updatedGroup.setGroupOwner(originalGroup.getGroupOwner());
                updatedGroup.setUDynMembershipCond(originalGroup.getUDynMembershipCond());
                updatedGroup.getADynMembershipConds().putAll(originalGroup.getADynMembershipConds());
                updatedGroup.getTypeExtensions().addAll(originalGroup.getTypeExtensions());
                anyPatch = (T) AnyOperations.diff(updatedGroup, originalGroup, true);
                break;
            case ANY_OBJECT:
                AnyObjectTO originalAnyObject = (AnyObjectTO) original;
                AnyObjectTO updatedAnyObject = (AnyObjectTO) updated;
                if (StringUtils.isBlank(updatedAnyObject.getName())) {
                    updatedAnyObject.setName(originalAnyObject.getName());
                }
                anyPatch = (T) AnyOperations.diff(updatedAnyObject, originalAnyObject, true);
                break;
            default:
        }
    }
    return anyPatch;
}
Also used : AnyTO(org.apache.syncope.common.lib.to.AnyTO) AnyObjectTO(org.apache.syncope.common.lib.to.AnyObjectTO) User(org.apache.syncope.core.persistence.api.entity.user.User) UserTO(org.apache.syncope.common.lib.to.UserTO) GroupTO(org.apache.syncope.common.lib.to.GroupTO) Transactional(org.springframework.transaction.annotation.Transactional)

Example 33 with AnyObjectTO

use of org.apache.syncope.common.lib.to.AnyObjectTO in project syncope by apache.

the class ConnObjectUtils method getAnyTO.

/**
 * Build a UserTO / GroupTO / AnyObjectTO out of connector object attributes and schema mapping.
 *
 * @param obj connector object
 * @param pullTask pull task
 * @param provision provision information
 * @param anyUtils utils
 * @param <T> any object
 * @return UserTO for the user to be created
 */
@Transactional(readOnly = true)
public <T extends AnyTO> T getAnyTO(final ConnectorObject obj, final PullTask pullTask, final Provision provision, final AnyUtils anyUtils) {
    T anyTO = getAnyTOFromConnObject(obj, pullTask, provision, anyUtils);
    // (for users) if password was not set above, generate if resource is configured for that
    if (anyTO instanceof UserTO && StringUtils.isBlank(((UserTO) anyTO).getPassword()) && provision.getResource().isRandomPwdIfNotProvided()) {
        UserTO userTO = (UserTO) anyTO;
        List<PasswordPolicy> passwordPolicies = new ArrayList<>();
        Realm realm = realmDAO.findByFullPath(userTO.getRealm());
        if (realm != null) {
            realmDAO.findAncestors(realm).stream().filter(ancestor -> ancestor.getPasswordPolicy() != null).forEach(ancestor -> {
                passwordPolicies.add(ancestor.getPasswordPolicy());
            });
        }
        userTO.getResources().stream().map(resource -> resourceDAO.find(resource)).filter(resource -> resource != null && resource.getPasswordPolicy() != null).forEach(resource -> {
            passwordPolicies.add(resource.getPasswordPolicy());
        });
        String password;
        try {
            password = passwordGenerator.generate(passwordPolicies);
        } catch (InvalidPasswordRuleConf e) {
            LOG.error("Could not generate policy-compliant random password for {}", userTO, e);
            password = SecureRandomUtils.generateRandomPassword(16);
        }
        userTO.setPassword(password);
    }
    return anyTO;
}
Also used : AttrTO(org.apache.syncope.common.lib.to.AttrTO) Realm(org.apache.syncope.core.persistence.api.entity.Realm) RealmTO(org.apache.syncope.common.lib.to.RealmTO) LoggerFactory(org.slf4j.LoggerFactory) AnyTO(org.apache.syncope.common.lib.to.AnyTO) Autowired(org.springframework.beans.factory.annotation.Autowired) ConnObjectTO(org.apache.syncope.common.lib.to.ConnObjectTO) PasswordGenerator(org.apache.syncope.core.spring.security.PasswordGenerator) InvalidPasswordRuleConf(org.apache.syncope.core.provisioning.api.utils.policy.InvalidPasswordRuleConf) StringUtils(org.apache.commons.lang3.StringUtils) ArrayList(java.util.ArrayList) PasswordPolicy(org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy) GuardedString(org.identityconnectors.common.security.GuardedString) Attribute(org.identityconnectors.framework.common.objects.Attribute) PullTask(org.apache.syncope.core.persistence.api.entity.task.PullTask) Base64(org.identityconnectors.common.Base64) MappingManager(org.apache.syncope.core.provisioning.api.MappingManager) SecurityUtil(org.identityconnectors.common.security.SecurityUtil) RealmDAO(org.apache.syncope.core.persistence.api.dao.RealmDAO) OrgUnit(org.apache.syncope.core.persistence.api.entity.resource.OrgUnit) AnyPatch(org.apache.syncope.common.lib.patch.AnyPatch) Encryptor(org.apache.syncope.core.spring.security.Encryptor) Logger(org.slf4j.Logger) UserDAO(org.apache.syncope.core.persistence.api.dao.UserDAO) GuardedByteArray(org.identityconnectors.common.security.GuardedByteArray) Set(java.util.Set) User(org.apache.syncope.core.persistence.api.entity.user.User) GroupTO(org.apache.syncope.common.lib.to.GroupTO) SecureRandomUtils(org.apache.syncope.core.spring.security.SecureRandomUtils) ConnectorObject(org.identityconnectors.framework.common.objects.ConnectorObject) List(java.util.List) Provision(org.apache.syncope.core.persistence.api.entity.resource.Provision) Component(org.springframework.stereotype.Component) UserTO(org.apache.syncope.common.lib.to.UserTO) AnyUtils(org.apache.syncope.core.persistence.api.entity.AnyUtils) ExternalResourceDAO(org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO) AnyOperations(org.apache.syncope.common.lib.AnyOperations) AnyObjectTO(org.apache.syncope.common.lib.to.AnyObjectTO) Transactional(org.springframework.transaction.annotation.Transactional) InvalidPasswordRuleConf(org.apache.syncope.core.provisioning.api.utils.policy.InvalidPasswordRuleConf) UserTO(org.apache.syncope.common.lib.to.UserTO) PasswordPolicy(org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy) ArrayList(java.util.ArrayList) GuardedString(org.identityconnectors.common.security.GuardedString) Realm(org.apache.syncope.core.persistence.api.entity.Realm) Transactional(org.springframework.transaction.annotation.Transactional)

Example 34 with AnyObjectTO

use of org.apache.syncope.common.lib.to.AnyObjectTO in project syncope by apache.

the class TemplateUtils method apply.

@Transactional(readOnly = true)
public <T extends AnyTO> void apply(final T anyTO, final AnyTO template) {
    fill(anyTO, template);
    MapContext jexlContext = new MapContext();
    JexlUtils.addFieldsToContext(anyTO, jexlContext);
    JexlUtils.addAttrTOsToContext(anyTO.getPlainAttrs(), jexlContext);
    JexlUtils.addAttrTOsToContext(anyTO.getDerAttrs(), jexlContext);
    JexlUtils.addAttrTOsToContext(anyTO.getVirAttrs(), jexlContext);
    if (template instanceof AnyObjectTO) {
        fillRelationships((GroupableRelatableTO) anyTO, ((GroupableRelatableTO) template));
        fillMemberships((GroupableRelatableTO) anyTO, ((GroupableRelatableTO) template));
    } else if (template instanceof UserTO) {
        if (StringUtils.isNotBlank(((UserTO) template).getUsername())) {
            String evaluated = JexlUtils.evaluate(((UserTO) template).getUsername(), jexlContext);
            if (StringUtils.isNotBlank(evaluated)) {
                ((UserTO) anyTO).setUsername(evaluated);
            }
        }
        if (StringUtils.isNotBlank(((UserTO) template).getPassword())) {
            String evaluated = JexlUtils.evaluate(((UserTO) template).getPassword(), jexlContext);
            if (StringUtils.isNotBlank(evaluated)) {
                ((UserTO) anyTO).setPassword(evaluated);
            }
        }
        fillRelationships((GroupableRelatableTO) anyTO, ((GroupableRelatableTO) template));
        fillMemberships((GroupableRelatableTO) anyTO, ((GroupableRelatableTO) template));
    } else if (template instanceof GroupTO) {
        if (StringUtils.isNotBlank(((GroupTO) template).getName())) {
            String evaluated = JexlUtils.evaluate(((GroupTO) template).getName(), jexlContext);
            if (StringUtils.isNotBlank(evaluated)) {
                ((GroupTO) anyTO).setName(evaluated);
            }
        }
        if (((GroupTO) template).getUserOwner() != null) {
            final User userOwner = userDAO.find(((GroupTO) template).getUserOwner());
            if (userOwner != null) {
                ((GroupTO) anyTO).setUserOwner(userOwner.getKey());
            }
        }
        if (((GroupTO) template).getGroupOwner() != null) {
            final Group groupOwner = groupDAO.find(((GroupTO) template).getGroupOwner());
            if (groupOwner != null) {
                ((GroupTO) anyTO).setGroupOwner(groupOwner.getKey());
            }
        }
    }
}
Also used : AnyObjectTO(org.apache.syncope.common.lib.to.AnyObjectTO) Group(org.apache.syncope.core.persistence.api.entity.group.Group) GroupableRelatableTO(org.apache.syncope.common.lib.to.GroupableRelatableTO) User(org.apache.syncope.core.persistence.api.entity.user.User) UserTO(org.apache.syncope.common.lib.to.UserTO) MapContext(org.apache.commons.jexl3.MapContext) GroupTO(org.apache.syncope.common.lib.to.GroupTO) Transactional(org.springframework.transaction.annotation.Transactional)

Example 35 with AnyObjectTO

use of org.apache.syncope.common.lib.to.AnyObjectTO in project syncope by apache.

the class AnyObjectITCase method update.

@Test
public void update() {
    AnyObjectTO anyObjectTO = getSampleTO("update");
    anyObjectTO = createAnyObject(anyObjectTO).getEntity();
    assertEquals(1, anyObjectTO.getPlainAttrs().size());
    AnyObjectPatch anyObjectPatch = new AnyObjectPatch();
    anyObjectPatch.setKey(anyObjectTO.getKey());
    String newLocation = "new" + getUUIDString();
    anyObjectPatch.getPlainAttrs().add(attrAddReplacePatch("location", newLocation));
    anyObjectTO = updateAnyObject(anyObjectPatch).getEntity();
    assertEquals(newLocation, anyObjectTO.getPlainAttr("location").get().getValues().get(0));
}
Also used : AnyObjectTO(org.apache.syncope.common.lib.to.AnyObjectTO) AnyObjectPatch(org.apache.syncope.common.lib.patch.AnyObjectPatch) Test(org.junit.jupiter.api.Test)

Aggregations

AnyObjectTO (org.apache.syncope.common.lib.to.AnyObjectTO)45 Test (org.junit.jupiter.api.Test)19 GroupTO (org.apache.syncope.common.lib.to.GroupTO)14 UserTO (org.apache.syncope.common.lib.to.UserTO)14 AnyObjectPatch (org.apache.syncope.common.lib.patch.AnyObjectPatch)13 AttrTO (org.apache.syncope.common.lib.to.AttrTO)10 List (java.util.List)9 SyncopeClientException (org.apache.syncope.common.lib.SyncopeClientException)8 MembershipTO (org.apache.syncope.common.lib.to.MembershipTO)8 Map (java.util.Map)7 Pair (org.apache.commons.lang3.tuple.Pair)6 AnyTO (org.apache.syncope.common.lib.to.AnyTO)6 ProvisioningResult (org.apache.syncope.common.lib.to.ProvisioningResult)6 Optional (java.util.Optional)5 Set (java.util.Set)5 ConnObjectTO (org.apache.syncope.common.lib.to.ConnObjectTO)5 AnyQuery (org.apache.syncope.common.rest.api.beans.AnyQuery)5 User (org.apache.syncope.core.persistence.api.entity.user.User)5 ArrayList (java.util.ArrayList)4 Response (javax.ws.rs.core.Response)4