use of org.gluu.oxtrust.model.scim.ScimGroup in project oxTrust by GluuFederation.
the class BulkWebService method bulkOperation.
@POST
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response bulkOperation(@Context HttpServletRequest request, @HeaderParam("Authorization") String authorization, ScimBulkOperation operation) throws Exception {
Response authorizationResponse = processAuthorization(authorization);
if (authorizationResponse != null) {
return authorizationResponse;
}
String domain;
URL reconstructedURL;
reconstructedURL = new URL(request.getScheme(), request.getServerName(), request.getServerPort(), "");
domain = reconstructedURL.toString();
log.info(" getting list of BulkRequest ");
List<BulkRequests> bulkRequests = operation.getOperations();
ScimBulkResponse scimBulkResponse = new ScimBulkResponse();
List<BulkResponses> listResponses = new ArrayList<BulkResponses>();
for (BulkRequests oneRequest : bulkRequests) {
log.info(" checking operations ");
if (oneRequest.getPath().contains("Users")) {
log.info(" operations is for Users ");
log.info(" method : " + oneRequest.getMethod());
if (oneRequest.getMethod().equalsIgnoreCase("POST")) {
log.info(" method is post ");
String bulkId = oneRequest.getBulkId();
String method = oneRequest.getMethod();
ScimPerson person = oneRequest.getData();
boolean status = createUser(person);
if (status) {
log.info(" POST status is true ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setBulkId(bulkId);
bulkResponses.setMethod(method);
GluuCustomPerson gluuPerson = personService.getPersonByUid(person.getUserName());
String iD = gluuPerson.getInum();
String location = (new StringBuilder()).append(domain).append("/oxTrust/seam/resource/restv1/Users/").append(iD).toString();
bulkResponses.setLocation(location);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("201");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
} else if (!status) {
log.info(" POST status is false ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setBulkId(bulkId);
bulkResponses.setMethod(method);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("400");
result.setDescription("Request is unparseable, syntactically incorrect, or violates schema.");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
}
} else if (oneRequest.getMethod().equalsIgnoreCase("PUT")) {
log.info(" Status is PUT ");
String method = oneRequest.getMethod();
String version = oneRequest.getVersion();
String path = oneRequest.getPath();
ScimPerson person = oneRequest.getData();
String personiD = getId(path);
log.info(" Inum : " + getId(path));
boolean status = updateUser(personiD, person);
if (status) {
log.info(" PUT status is true ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
String iD = personiD;
String location = (new StringBuilder()).append(domain).append("/oxTrust/seam/resource/restv1/Users/").append(iD).toString();
bulkResponses.setLocation(location);
EntityTag eTag = new EntityTag(version, true);
String newVersion = eTag.getValue();
bulkResponses.setVersion(newVersion);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("200");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
} else if (!status) {
log.info(" PUT status is false ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
bulkResponses.setVersion(version);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("400");
result.setDescription("Request is unparseable, syntactically incorrect, or violates schema.");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
}
} else if (oneRequest.getMethod().equalsIgnoreCase("DELETE")) {
log.info(" Operation is DELETE ");
String method = oneRequest.getMethod();
String path = oneRequest.getPath();
String personiD = getId(path);
boolean status = deleteUser(personiD);
if (status) {
log.info(" DELETE operation is true ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
String location = (new StringBuilder()).append(domain).append("/oxTrust/seam/resource/restv1/Users/").append(personiD).toString();
bulkResponses.setLocation(location);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("200");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
} else if (!status) {
log.info(" DELETE operation is False ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("400");
result.setDescription("Request is unparseable, syntactically incorrect, or violates schema.");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
}
}
//
} else if (oneRequest.getPath().contains("Groups")) {
if (oneRequest.getMethod().equalsIgnoreCase("POST")) {
log.info(" method is post ");
String bulkId = oneRequest.getBulkId();
String method = oneRequest.getMethod();
ScimGroup group = copyUtils.copy(oneRequest.getData(), null);
boolean status = createGroup(group);
if (status) {
log.info(" POST status is true ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setBulkId(bulkId);
bulkResponses.setMethod(method);
GluuGroup gluuGroup = groupService.getGroupByDisplayName(group.getDisplayName());
String iD = gluuGroup.getInum();
String location = (new StringBuilder()).append(domain).append("/oxTrust/seam/resource/restv1/Groups/").append(iD).toString();
bulkResponses.setLocation(location);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("201");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
} else if (!status) {
log.info(" POST status is false ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setBulkId(bulkId);
bulkResponses.setMethod(method);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("400");
result.setDescription("Request is unparseable, syntactically incorrect, or violates schema.");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
}
} else if (oneRequest.getMethod().equalsIgnoreCase("PUT")) {
log.info(" Status is PUT ");
String method = oneRequest.getMethod();
String version = oneRequest.getVersion();
String path = oneRequest.getPath();
ScimGroup group = copyUtils.copy(oneRequest.getData(), null);
String groupiD = getId(path);
boolean status = updateGroup(groupiD, group);
if (status) {
log.info(" PUT status is true ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
String iD = groupiD;
String location = (new StringBuilder()).append(domain).append("/oxTrust/seam/resource/restv1/Groups/").append(iD).toString();
bulkResponses.setLocation(location);
EntityTag eTag = new EntityTag(version, true);
String newVersion = eTag.getValue();
bulkResponses.setVersion(newVersion);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("200");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
} else if (!status) {
log.info(" PUT status is false ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
bulkResponses.setVersion(version);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("400");
result.setDescription("Request is unparseable, syntactically incorrect, or violates schema.");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
}
} else if (oneRequest.getMethod().equalsIgnoreCase("DELETE")) {
log.info(" Operation is DELETE ");
String method = oneRequest.getMethod();
String path = oneRequest.getPath();
String groupiD = getId(path);
boolean status = deleteGroup(groupiD);
if (status) {
log.info(" DELETE operation is true ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
String location = (new StringBuilder()).append(domain).append("/oxTrust/seam/resource/restv1/Groups/").append(groupiD).toString();
bulkResponses.setLocation(location);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("200");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
} else if (!status) {
log.info(" DELETE operation is False ");
BulkResponses bulkResponses = new BulkResponses();
bulkResponses.setMethod(method);
BulkResponseStatus result = new BulkResponseStatus();
result.setCode("400");
result.setDescription("Request is unparseable, syntactically incorrect, or violates schema.");
bulkResponses.setStatus(result);
listResponses.add(bulkResponses);
}
}
}
}
List<String> schemas = new ArrayList<String>();
schemas.add(Constants.SCIM1_CORE_SCHEMA_ID);
scimBulkResponse.setSchemas(schemas);
scimBulkResponse.setOperations(listResponses);
URI location = new URI("/Bulk/");
return Response.ok(scimBulkResponse).location(location).build();
}
use of org.gluu.oxtrust.model.scim.ScimGroup in project oxTrust by GluuFederation.
the class CopyUtils method copy.
/**
* Copy data from GluuGroup object to ScimGroup object
*
* @param source
* @param destination
* @return
* @throws Exception
*/
public ScimGroup copy(GluuGroup source, ScimGroup destination) throws Exception {
if (source == null) {
return null;
}
if (destination == null) {
destination = new ScimGroup();
}
List<String> schemas = new ArrayList<String>();
schemas.add(Constants.SCIM1_CORE_SCHEMA_ID);
destination.setSchemas(schemas);
destination.setDisplayName(source.getDisplayName());
destination.setId(source.getInum());
if (source.getMembers() != null) {
if (source.getMembers().size() != 0) {
List<ScimGroupMembers> members = new ArrayList<ScimGroupMembers>();
List<String> membersList = source.getMembers();
for (String oneMember : membersList) {
ScimGroupMembers member = new ScimGroupMembers();
GluuCustomPerson person = personService.getPersonByDn(oneMember);
member.setValue(person.getInum());
member.setDisplay(person.getDisplayName());
members.add(member);
}
destination.setMembers(members);
}
}
return destination;
}
use of org.gluu.oxtrust.model.scim.ScimGroup in project oxTrust by GluuFederation.
the class CopyUtils2 method copy.
/**
* Copy data from GluuGroup object to ScimGroup object
*
* @param source
* @param destination
* @return
* @throws Exception
*/
public Group copy(GluuGroup source, Group destination) throws Exception {
if (source == null) {
return null;
}
if (destination == null) {
destination = new Group();
}
destination.setDisplayName(source.getDisplayName());
destination.setId(source.getInum());
if (source.getMembers() != null) {
if (source.getMembers().size() > 0) {
Set<MemberRef> memberRefSet = new HashSet<MemberRef>();
List<String> membersList = source.getMembers();
for (String oneMember : membersList) {
if (oneMember != null && !oneMember.isEmpty()) {
GluuCustomPerson gluuCustomPerson = personService.getPersonByDn(oneMember);
MemberRef memberRef = new MemberRef();
memberRef.setValue(gluuCustomPerson.getInum());
memberRef.setDisplay(gluuCustomPerson.getDisplayName());
String reference = appConfiguration.getBaseEndpoint() + "/scim/v2/Users/" + gluuCustomPerson.getInum();
memberRef.setReference(reference);
memberRefSet.add(memberRef);
}
}
destination.setMembers(memberRefSet);
}
}
log.trace(" getting meta ");
Meta meta = (destination.getMeta() != null) ? destination.getMeta() : new Meta();
if (source.getAttribute("oxTrustMetaVersion") != null) {
meta.setVersion(source.getAttribute("oxTrustMetaVersion"));
}
String location = source.getAttribute("oxTrustMetaLocation");
if (location != null && !location.isEmpty()) {
if (!location.startsWith("https://") && !location.startsWith("http://")) {
location = appConfiguration.getBaseEndpoint() + location;
}
} else {
location = appConfiguration.getBaseEndpoint() + "/scim/v2/Groups/" + source.getInum();
}
meta.setLocation(location);
if (source.getAttribute("oxTrustMetaCreated") != null && !source.getAttribute("oxTrustMetaCreated").isEmpty()) {
try {
DateTime dateTimeUtc = new DateTime(source.getAttribute("oxTrustMetaCreated"), DateTimeZone.UTC);
meta.setCreated(dateTimeUtc.toDate());
} catch (Exception e) {
log.error(" Date parse exception (NEW format), continuing...", e);
// For backward compatibility
try {
meta.setCreated(new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(source.getAttribute("oxTrustMetaCreated")));
} catch (Exception ex) {
log.error(" Date parse exception (OLD format)", ex);
}
}
}
if (source.getAttribute("oxTrustMetaLastModified") != null && !source.getAttribute("oxTrustMetaLastModified").isEmpty()) {
try {
DateTime dateTimeUtc = new DateTime(source.getAttribute("oxTrustMetaLastModified"), DateTimeZone.UTC);
meta.setLastModified(dateTimeUtc.toDate());
} catch (Exception e) {
log.error(" Date parse exception (NEW format), continuing...", e);
// For backward compatibility
try {
meta.setLastModified(new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(source.getAttribute("oxTrustMetaLastModified")));
} catch (Exception ex) {
log.error(" Date parse exception (OLD format)", ex);
}
}
}
destination.setMeta(meta);
return destination;
}
use of org.gluu.oxtrust.model.scim.ScimGroup in project oxTrust by GluuFederation.
the class GroupWebService method updateGroup.
@Path("{id}")
@PUT
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response updateGroup(@HeaderParam("Authorization") String authorization, @PathParam("id") String id, ScimGroup group) throws Exception {
Response authorizationResponse = processAuthorization(authorization);
if (authorizationResponse != null) {
return authorizationResponse;
}
try {
GluuGroup gluuGroup = groupService.getGroupByInum(id);
if (gluuGroup == null) {
return getErrorResponse("Resource " + id + " not found", Response.Status.NOT_FOUND.getStatusCode());
} else {
// Validate if attempting to update displayName of a different id
if (gluuGroup.getDisplayName() != null) {
GluuGroup groupToFind = new GluuGroup();
groupToFind.setDisplayName(group.getDisplayName());
List<GluuGroup> foundGroups = groupService.findGroups(groupToFind, 2);
if (foundGroups != null && foundGroups.size() > 0) {
for (GluuGroup foundGroup : foundGroups) {
if (foundGroup != null && !foundGroup.getInum().equalsIgnoreCase(gluuGroup.getInum())) {
throw new DuplicateEntryException("Cannot update displayName of a different id: " + group.getDisplayName());
}
}
}
}
}
GluuGroup newGluuGroup = copyUtils.copy(group, gluuGroup, true);
if (group.getMembers().size() > 0) {
serviceUtil.personMembersAdder(newGluuGroup, groupService.getDnForGroup(id));
}
// For custom script: update group
if (externalScimService.isEnabled()) {
externalScimService.executeScimUpdateGroupMethods(newGluuGroup);
}
groupService.updateGroup(newGluuGroup);
log.debug(" group updated ");
ScimGroup newGroup = copyUtils.copy(newGluuGroup, null);
URI location = new URI("/Groups/" + id);
return Response.ok(newGroup).location(location).build();
} catch (EntryPersistenceException ex) {
ex.printStackTrace();
return getErrorResponse("Resource " + id + " not found", Response.Status.NOT_FOUND.getStatusCode());
} catch (DuplicateEntryException ex) {
log.error("Failed to update group", ex);
ex.printStackTrace();
return getErrorResponse(ex.getMessage(), Response.Status.BAD_REQUEST.getStatusCode());
} catch (Exception ex) {
log.error("Failed to update group", ex);
ex.printStackTrace();
return getErrorResponse(INTERNAL_SERVER_ERROR_MESSAGE, Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
}
}
use of org.gluu.oxtrust.model.scim.ScimGroup in project oxTrust by GluuFederation.
the class GroupWebService method createGroup.
@POST
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
public Response createGroup(@HeaderParam("Authorization") String authorization, ScimGroup group) throws Exception {
Response authorizationResponse = processAuthorization(authorization);
if (authorizationResponse != null) {
return authorizationResponse;
}
// Return HTTP response with status code 201 Created
log.debug(" copying gluuGroup ");
GluuGroup gluuGroup = copyUtils.copy(group, null, false);
if (gluuGroup == null) {
return getErrorResponse("Failed to create group", Response.Status.BAD_REQUEST.getStatusCode());
}
try {
log.debug(" generating inum ");
String inum = groupService.generateInumForNewGroup();
log.debug(" getting DN ");
String dn = groupService.getDnForGroup(inum);
log.debug(" getting iname ");
String iname = groupService.generateInameForNewGroup(group.getDisplayName().replaceAll(" ", ""));
log.debug(" setting dn ");
gluuGroup.setDn(dn);
log.debug(" setting inum ");
gluuGroup.setInum(inum);
log.debug(" setting iname ");
gluuGroup.setIname(iname);
log.info("group.getMembers().size() : " + group.getMembers().size());
if (group.getMembers().size() > 0) {
serviceUtil.personMembersAdder(gluuGroup, dn);
}
// For custom script: create group
if (externalScimService.isEnabled()) {
externalScimService.executeScimCreateGroupMethods(gluuGroup);
}
log.debug("adding new GluuGroup");
groupService.addGroup(gluuGroup);
ScimGroup newGroup = copyUtils.copy(gluuGroup, null);
String uri = "/Groups/" + newGroup.getId();
return Response.created(URI.create(uri)).entity(newGroup).build();
} catch (DuplicateEntryException ex) {
log.error("Failed to create group", ex);
ex.printStackTrace();
return getErrorResponse(ex.getMessage(), Response.Status.BAD_REQUEST.getStatusCode());
} catch (Exception ex) {
log.error("Failed to create group", ex);
ex.printStackTrace();
return getErrorResponse(INTERNAL_SERVER_ERROR_MESSAGE, Response.Status.INTERNAL_SERVER_ERROR.getStatusCode());
}
}
Aggregations