use of org.gluu.oxtrust.model.scim2.group.Member in project oxTrust by GluuFederation.
the class CopyUtils2 method copy.
/**
* Copy data from ScimGroup object to GluuGroupn object
*
* @param source
* @param destination
* @param isUpdate
* @return
* @throws IOException
* @throws JsonMappingException
* @throws JsonGenerationException
* @throws Exception
*/
public GluuGroup copy(Group source, GluuGroup destination, boolean isUpdate) throws Exception {
if (source == null || !isValidData(source, isUpdate)) {
return null;
}
if (destination == null) {
log.trace(" creating a new GluuGroup instant ");
destination = new GluuGroup();
}
if (isUpdate) {
if (source.getDisplayName() != null && source.getDisplayName().length() > 0) {
destination.setDisplayName(source.getDisplayName());
}
if (source.getMembers() != null && source.getMembers().size() > 0) {
Set<MemberRef> members = source.getMembers();
List<String> listMembers = new ArrayList<String>();
for (MemberRef member : members) {
listMembers.add(personService.getDnForPerson(member.getValue()));
}
destination.setMembers(listMembers);
}
} else {
log.trace(" creating a new GroupService instant ");
log.trace(" source.getDisplayName() : ", source.getDisplayName());
if (groupService.getGroupByDisplayName(source.getDisplayName()) != null) {
log.trace(" groupService1.getGroupByDisplayName(source.getDisplayName() != null : ");
return null;
}
if (source.getDisplayName() != null && source.getDisplayName().length() > 0) {
destination.setDisplayName(source.getDisplayName());
}
log.trace(" source.getMembers() : ", source.getMembers());
log.trace(" source.getMembers().size() : ", source.getMembers().size());
if (source.getMembers() != null && source.getMembers().size() > 0) {
Set<MemberRef> members = source.getMembers();
List<String> listMembers = new ArrayList<String>();
for (MemberRef member : members) {
listMembers.add(personService.getDnForPerson(member.getValue()));
}
destination.setMembers(listMembers);
}
/*GluuCustomPerson authUser = (GluuCustomPerson) identity.getSessionMap().get(OxTrustConstants.CURRENT_PERSON);
destination.setOwner(authUser.getDn());
log.trace(" authUser.getDn() : ", authUser.getDn());*/
destination.setStatus(GluuStatus.ACTIVE);
destination.setOrganization(organizationService.getDnForOrganization());
}
return destination;
}
use of org.gluu.oxtrust.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 org.gluu.oxtrust.model.scim2.group.Member in project oxTrust by GluuFederation.
the class Scim2GroupService method searchGroups.
public ListViewResponse<BaseScimResource> searchGroups(String filter, String sortBy, SortOrder sortOrder, int startIndex, int count, String groupsUrl, String usersUrl, int maxCount) throws Exception {
Filter ldapFilter = scimFilterParserService.createLdapFilter(filter, "inum=*", GroupResource.class);
log.info("Executing search for groups using: ldapfilter '{}', sortBy '{}', sortOrder '{}', startIndex '{}', count '{}'", ldapFilter.toString(), sortBy, sortOrder.getValue(), startIndex, count);
ListViewResponse<GluuGroup> list = ldapEntryManager.findListViewResponse(groupService.getDnForGroup(null), GluuGroup.class, ldapFilter, startIndex, count, maxCount, sortBy, sortOrder, null);
List<BaseScimResource> resources = new ArrayList<BaseScimResource>();
for (GluuGroup group : list.getResult()) {
GroupResource scimGroup = new GroupResource();
transferAttributesToGroupResource(group, scimGroup, groupsUrl, usersUrl);
// TODO: Delete this IF in the future - added for backwards compatibility with SCIM-Client <= 3.1.2.
if (scimGroup.getMembers() == null)
scimGroup.setMembers(new HashSet<Member>());
resources.add(scimGroup);
}
log.info("Found {} matching entries - returning {}", list.getTotalResults(), list.getResult().size());
ListViewResponse<BaseScimResource> result = new ListViewResponse<BaseScimResource>();
result.setResult(resources);
result.setTotalResults(list.getTotalResults());
return result;
}
use of org.gluu.oxtrust.model.scim2.group.Member in project oxTrust by GluuFederation.
the class Scim2GroupService method transferAttributesToGroup.
private void transferAttributesToGroup(GroupResource res, GluuGroup group, String usersUrl) {
// externalId (so oxTrustExternalId) not part of LDAP schema
group.setAttribute("oxTrustMetaCreated", res.getMeta().getCreated());
group.setAttribute("oxTrustMetaLastModified", res.getMeta().getLastModified());
// When creating group, location will be set again when having an inum
group.setAttribute("oxTrustMetaLocation", res.getMeta().getLocation());
group.setDisplayName(res.getDisplayName());
group.setStatus(GluuStatus.ACTIVE);
group.setOrganization(organizationService.getDnForOrganization());
// Add the members, and complement the $refs and users' display names in res
Set<Member> members = res.getMembers();
if (members != null && members.size() > 0) {
List<String> listMembers = new ArrayList<String>();
for (Member member : members) {
// it's not null as it is required in GroupResource
String inum = member.getValue();
GluuCustomPerson person = personService.getPersonByInum(inum);
if (person == null)
log.info("Member identified by {} does not exist. Ignored", inum);
else {
member.setDisplay(person.getDisplayName());
member.setRef(usersUrl + "/" + inum);
member.setType(ScimResourceUtil.getType(UserResource.class));
listMembers.add(person.getDn());
}
}
group.setMembers(listMembers);
}
}
use of org.gluu.oxtrust.model.scim2.group.Member in project oxTrust by GluuFederation.
the class UserWebService method patchUser.
@Path("{id}")
@PATCH
@Consumes({ MEDIA_TYPE_SCIM_JSON, MediaType.APPLICATION_JSON })
@Produces({ MEDIA_TYPE_SCIM_JSON + UTF8_CHARSET_FRAGMENT, MediaType.APPLICATION_JSON + UTF8_CHARSET_FRAGMENT })
@HeaderParam("Accept")
@DefaultValue(MEDIA_TYPE_SCIM_JSON)
@ProtectedApi
@RefAdjusted
@ApiOperation(value = "PATCH operation", notes = "https://tools.ietf.org/html/rfc7644#section-3.5.2", response = UserResource.class)
public Response patchUser(PatchRequest request, @PathParam("id") String id, @QueryParam(QUERY_PARAM_ATTRIBUTES) String attrsList, @QueryParam(QUERY_PARAM_EXCLUDED_ATTRS) String excludedAttrsList) {
Response response;
try {
log.debug("Executing web service method. patchUser");
UserResource user = new UserResource();
// person is not null (check associated decorator method)
GluuCustomPerson person = personService.getPersonByInum(id);
// Fill user instance with all info from person
scim2UserService.transferAttributesToUserResource(person, user, endpointUrl);
// Apply patches one by one in sequence
for (PatchOperation po : request.getOperations()) {
// Handle special case: https://github.com/GluuFederation/oxTrust/issues/800
if (po.getType().equals(REMOVE) && po.getPath().equals("pairwiseIdentitifers")) {
// If this block weren't here, the implementation will throw error because read-only attribute cannot be altered
// Note the path is intentionally mistyped, see class member in UserResource
person.setOxPPID(null);
user.setPairwiseIdentitifers(null);
scim2UserService.removePPIDsBranch(person.getDn());
} else
user = (UserResource) scim2PatchService.applyPatchOperation(user, po);
}
// Throws exception if final representation does not pass overall validation
log.debug("patchUser. Revising final resource representation still passes validations");
executeDefaultValidation(user);
ScimResourceUtil.adjustPrimarySubAttributes(user);
// Update timestamp
String now = ISODateTimeFormat.dateTime().withZoneUTC().print(System.currentTimeMillis());
user.getMeta().setLastModified(now);
// Replaces the information found in person with the contents of user
scim2UserService.replacePersonInfo(person, user, endpointUrl);
String json = resourceSerializer.serialize(user, attrsList, excludedAttrsList);
response = Response.ok(new URI(user.getMeta().getLocation())).entity(json).build();
} catch (InvalidAttributeValueException e) {
log.error(e.getMessage(), e);
response = getErrorResponse(Response.Status.BAD_REQUEST, ErrorScimType.MUTABILITY, e.getMessage());
} catch (SCIMException e) {
response = getErrorResponse(Response.Status.BAD_REQUEST, ErrorScimType.INVALID_SYNTAX, e.getMessage());
} catch (Exception e) {
log.error("Failure at patchUser method", e);
response = getErrorResponse(Response.Status.INTERNAL_SERVER_ERROR, "Unexpected error: " + e.getMessage());
}
return response;
}
Aggregations