Search in sources :

Example 1 with Member

use of io.jans.scim.model.scim2.group.Member in project oxTrust by GluuFederation.

the class Scim2GroupService method transferAttributesToGroupResource.

public void transferAttributesToGroupResource(GluuGroup gluuGroup, GroupResource res, String groupsUrl, String usersUrl) {
    res.setId(gluuGroup.getInum());
    Meta meta = new Meta();
    meta.setResourceType(ScimResourceUtil.getType(res.getClass()));
    meta.setCreated(gluuGroup.getAttribute("oxTrustMetaCreated"));
    meta.setLastModified(gluuGroup.getAttribute("oxTrustMetaLastModified"));
    meta.setLocation(gluuGroup.getAttribute("oxTrustMetaLocation"));
    if (meta.getLocation() == null)
        meta.setLocation(groupsUrl + "/" + gluuGroup.getInum());
    res.setMeta(meta);
    res.setDisplayName(gluuGroup.getDisplayName());
    // Transfer members from GluuGroup to GroupResource
    List<String> memberDNs = gluuGroup.getMembers();
    if (memberDNs != null) {
        Set<Member> members = new HashSet<Member>();
        for (String dn : memberDNs) {
            GluuCustomPerson person = null;
            try {
                person = personService.getPersonByDn(dn);
            } catch (Exception e) {
                log.warn("Wrong member entry {} found in group {}", dn, gluuGroup.getDisplayName());
            }
            if (person != null) {
                Member aMember = new Member();
                aMember.setValue(person.getInum());
                aMember.setRef(usersUrl + "/" + person.getInum());
                aMember.setType(ScimResourceUtil.getType(UserResource.class));
                aMember.setDisplay(person.getDisplayName());
                members.add(aMember);
            }
        }
        res.setMembers(members);
    }
}
Also used : Meta(org.gluu.oxtrust.model.scim2.Meta) GluuCustomPerson(org.gluu.oxtrust.model.GluuCustomPerson) UserResource(org.gluu.oxtrust.model.scim2.user.UserResource) Member(org.gluu.oxtrust.model.scim2.group.Member) WebApplicationException(javax.ws.rs.WebApplicationException) HashSet(java.util.HashSet)

Example 2 with Member

use of io.jans.scim.model.scim2.group.Member in project jans by JanssenProject.

the class UserPersistenceHelper method removeUserFromGroups.

/**
 * "Detaches" a person from all groups he is currently member of
 * @param person The person in question
 * @throws Exception
 */
public void removeUserFromGroups(ScimCustomPerson person) {
    String dn = person.getDn();
    List<String> groups = person.getMemberOf();
    for (String oneGroup : groups) {
        try {
            GluuGroup aGroup = groupService.getGroupByDn(oneGroup);
            List<String> groupMembers = aGroup.getMembers();
            int idx = Optional.ofNullable(groupMembers).map(l -> l.indexOf(dn)).orElse(-1);
            if (idx >= 0) {
                List<String> newMembers = new ArrayList<>();
                newMembers.addAll(groupMembers.subList(0, idx));
                newMembers.addAll(groupMembers.subList(idx + 1, groupMembers.size()));
                aGroup.setMembers(newMembers.isEmpty() ? null : newMembers);
                groupService.updateGroup(aGroup);
            }
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
}
Also used : LdapEntryManagerFactory(io.jans.orm.ldap.impl.LdapEntryManagerFactory) AttributeService(io.jans.scim.service.AttributeService) GroupService(io.jans.scim.service.GroupService) ScimCustomPerson(io.jans.scim.model.scim.ScimCustomPerson) Logger(org.slf4j.Logger) Date(java.util.Date) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Set(java.util.Set) Email(io.jans.scim.model.scim2.user.Email) DateUtil(io.jans.scim.model.scim2.util.DateUtil) Collectors(java.util.stream.Collectors) PersistenceEntryManager(io.jans.orm.PersistenceEntryManager) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Inject(javax.inject.Inject) List(java.util.List) PersonService(io.jans.scim.service.PersonService) Stream(java.util.stream.Stream) Optional(java.util.Optional) GluuGroup(io.jans.scim.model.GluuGroup) ApplicationScoped(javax.enterprise.context.ApplicationScoped) ServiceUtil(io.jans.scim.util.ServiceUtil) ArrayList(java.util.ArrayList) GluuGroup(io.jans.scim.model.GluuGroup)

Example 3 with Member

use of io.jans.scim.model.scim2.group.Member in project jans by JanssenProject.

the class Scim2GroupService method restoreMembersDisplay.

/**
 * Takes two GroupResource objects and attempts to fill the members' display names
 * in the second object when missing based on the data existing in the first object.
 * In practice the first object represents an already stored group while the
 * second is the result of modifications applied upon the first. In the course
 * of modifications some display names may have removed. This method tries to
 * recover some of this lost data
 * @param trusted Object containing valid group data
 * @param altered Modified object
 */
public void restoreMembersDisplay(GroupResource trusted, GroupResource altered) {
    int aSize = membersCount(altered);
    int tSize = membersCount(trusted);
    if (aSize > 0 && tSize > 0) {
        Map<String, String> map = trusted.getMembers().stream().filter(m -> m.getDisplay() != null).collect(Collectors.toMap(Member::getValue, Member::getDisplay));
        for (Member member : altered.getMembers()) {
            String inum = member.getValue();
            if (member.getDisplay() == null) {
                member.setDisplay(map.get(inum));
            }
        }
    }
}
Also used : GroupService(io.jans.scim.service.GroupService) Arrays(java.util.Arrays) Filter(io.jans.orm.search.filter.Filter) Meta(io.jans.scim.model.scim2.Meta) DateUtil(io.jans.scim.model.scim2.util.DateUtil) GluuStatus(io.jans.model.GluuStatus) ArrayList(java.util.ArrayList) ScimResourceUtil(io.jans.scim.model.scim2.util.ScimResourceUtil) HashSet(java.util.HashSet) Inject(javax.inject.Inject) BaseScimResource(io.jans.scim.model.scim2.BaseScimResource) PersonService(io.jans.scim.service.PersonService) Map(java.util.Map) GluuGroup(io.jans.scim.model.GluuGroup) Status(javax.ws.rs.core.Response.Status) SortOrder(io.jans.orm.model.SortOrder) Member(io.jans.scim.model.scim2.group.Member) Logger(org.slf4j.Logger) UserResource(io.jans.scim.model.scim2.user.UserResource) OrganizationService(io.jans.scim.service.OrganizationService) Set(java.util.Set) ScimFilterParserService(io.jans.scim.service.antlr.scimFilter.ScimFilterParserService) Collectors(java.util.stream.Collectors) PersistenceEntryManager(io.jans.orm.PersistenceEntryManager) Serializable(java.io.Serializable) GroupResource(io.jans.scim.model.scim2.group.GroupResource) List(java.util.List) Stream(java.util.stream.Stream) ExternalScimService(io.jans.scim.service.external.ExternalScimService) PagedResult(io.jans.orm.model.PagedResult) Optional(java.util.Optional) WebApplicationException(javax.ws.rs.WebApplicationException) ApplicationScoped(javax.enterprise.context.ApplicationScoped) GluuCustomPerson(io.jans.scim.model.GluuCustomPerson) Collections(java.util.Collections) Member(io.jans.scim.model.scim2.group.Member)

Example 4 with Member

use of io.jans.scim.model.scim2.group.Member in project jans by JanssenProject.

the class Scim2GroupService method transferAttributesToGroup.

private void transferAttributesToGroup(GroupResource res, GluuGroup group, boolean skipMembersValidation, boolean fillMembersDisplay, String usersUrl) {
    // externalId (so jansExtId) not part of LDAP schema
    group.setAttribute("jansMetaCreated", res.getMeta().getCreated());
    group.setAttribute("jansMetaLastMod", res.getMeta().getLastModified());
    // When creating group, location will be set again when having an inum
    group.setAttribute("jansMetaLocation", res.getMeta().getLocation());
    group.setDisplayName(res.getDisplayName());
    group.setStatus(GluuStatus.ACTIVE);
    group.setOrganization(organizationService.getDnForOrganization());
    Set<Member> members = res.getMembers();
    if (members != null && members.size() > 0) {
        Set<String> groupMembers = group.getMembers().stream().map(userPersistenceHelper::getUserInumFromDN).collect(Collectors.toCollection(HashSet::new));
        List<String> listMembers = new ArrayList<>();
        List<Member> invalidMembers = new ArrayList<>();
        // Add the members, and complement the $refs and users' display names in res
        for (Member member : members) {
            GluuCustomPerson person;
            // it's not null as it is required in GroupResource
            String inum = member.getValue();
            // we make database lookups
            if (!skipMembersValidation && !groupMembers.contains(inum)) {
                person = personService.getPersonByInum(inum);
                if (person != null && fillMembersDisplay) {
                    member.setDisplay(person.getDisplayName());
                }
            } else {
                person = new GluuCustomPerson();
                person.setDn(personService.getDnForPerson(inum));
            }
            if (person == null) {
                log.info("Member identified by {} does not exist. Ignored", inum);
                invalidMembers.add(member);
            } else {
                member.setRef(usersUrl + "/" + inum);
                member.setType(ScimResourceUtil.getType(UserResource.class));
                if (skipMembersValidation) {
                    // In overhead bypass mode, display names must not be returned
                    member.setDisplay(null);
                }
                listMembers.add(person.getDn());
            }
        }
        group.setMembers(listMembers);
        members.removeAll(invalidMembers);
        if (members.isEmpty()) {
            res.setMembers(null);
        }
    } else {
        group.setMembers(new ArrayList<>());
    }
}
Also used : GluuCustomPerson(io.jans.scim.model.GluuCustomPerson) ArrayList(java.util.ArrayList) UserResource(io.jans.scim.model.scim2.user.UserResource) Member(io.jans.scim.model.scim2.group.Member)

Example 5 with Member

use of io.jans.scim.model.scim2.group.Member in project jans by JanssenProject.

the class Scim2GroupService method transferAttributesToGroupResource.

public void transferAttributesToGroupResource(GluuGroup gluuGroup, GroupResource res, boolean fillMembersDisplay, String groupsUrl, String usersUrl) {
    res.setId(gluuGroup.getInum());
    Meta meta = new Meta();
    meta.setResourceType(ScimResourceUtil.getType(res.getClass()));
    meta.setCreated(gluuGroup.getAttribute("jansMetaCreated"));
    meta.setLastModified(gluuGroup.getAttribute("jansMetaLastMod"));
    meta.setLocation(gluuGroup.getAttribute("jansMetaLocation"));
    if (meta.getLocation() == null)
        meta.setLocation(groupsUrl + "/" + gluuGroup.getInum());
    res.setMeta(meta);
    res.setDisplayName(gluuGroup.getDisplayName());
    // Transfer members from GluuGroup to GroupResource
    List<String> memberDNs = gluuGroup.getMembers();
    if (memberDNs != null) {
        Set<Member> members = new HashSet<>();
        for (String dn : memberDNs) {
            GluuCustomPerson person = null;
            if (fillMembersDisplay) {
                try {
                    person = personService.getPersonByDn(dn);
                } catch (Exception e) {
                    log.warn("Wrong member entry {} found in group {}", dn, gluuGroup.getDisplayName());
                }
            }
            if (person == null) {
                person = new GluuCustomPerson();
                person.setInum(userPersistenceHelper.getUserInumFromDN(dn));
            }
            Member aMember = new Member();
            aMember.setValue(person.getInum());
            aMember.setRef(usersUrl + "/" + person.getInum());
            aMember.setType(ScimResourceUtil.getType(UserResource.class));
            aMember.setDisplay(person.getDisplayName());
            members.add(aMember);
        }
        res.setMembers(members);
    }
}
Also used : Meta(io.jans.scim.model.scim2.Meta) GluuCustomPerson(io.jans.scim.model.GluuCustomPerson) UserResource(io.jans.scim.model.scim2.user.UserResource) Member(io.jans.scim.model.scim2.group.Member) WebApplicationException(javax.ws.rs.WebApplicationException) HashSet(java.util.HashSet)

Aggregations

Member (io.jans.scim.model.scim2.group.Member)8 GroupResource (io.jans.scim.model.scim2.group.GroupResource)6 UserResource (io.jans.scim.model.scim2.user.UserResource)6 ArrayList (java.util.ArrayList)5 Collectors (java.util.stream.Collectors)5 Response (javax.ws.rs.core.Response)5 Test (org.testng.annotations.Test)5 HashSet (java.util.HashSet)4 Status (javax.ws.rs.core.Response.Status)4 GluuCustomPerson (io.jans.scim.model.GluuCustomPerson)3 BaseScimResource (io.jans.scim.model.scim2.BaseScimResource)3 ListResponse (io.jans.scim.model.scim2.ListResponse)3 List (java.util.List)3 Set (java.util.Set)3 WebApplicationException (javax.ws.rs.WebApplicationException)3 Assert (org.testng.Assert)3 PersistenceEntryManager (io.jans.orm.PersistenceEntryManager)2 GluuGroup (io.jans.scim.model.GluuGroup)2 Meta (io.jans.scim.model.scim2.Meta)2 PatchOperation (io.jans.scim.model.scim2.patch.PatchOperation)2