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);
}
}
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());
}
}
}
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));
}
}
}
}
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<>());
}
}
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);
}
}
Aggregations