Roberto Sánchez
2014-01-13 edd47c68c6a08bd756d96213c38e896a0a257bd1
securis/src/main/java/net/curisit/securis/services/OrganizationResource.java
....@@ -96,6 +96,15 @@
9696 return Response.ok(lt).build();
9797 }
9898
99
+ private boolean isCyclicalRelationship(int currentId, Organization parent) {
100
+ while (parent != null) {
101
+ if (parent.getId() == currentId)
102
+ return true;
103
+ parent = parent.getParentOrganization();
104
+ }
105
+ return false;
106
+ }
107
+
99108 @POST
100109 @Path("/")
101110 @Consumes(MediaType.APPLICATION_JSON)
....@@ -157,6 +166,10 @@
157166 log.error("Organization parent with id {} not found in DB", org.getParentOrgId());
158167 return Response.status(Status.NOT_FOUND).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Organization's parent not found with ID: " + org.getParentOrgId()).build();
159168 }
169
+ if (isCyclicalRelationship(currentOrg.getId(), parentOrg)) {
170
+ log.error("Organization parent generate a cyclical relationship, parent id {}, current id: {}", org.getParentOrgId(), currentOrg.getId());
171
+ return Response.status(Status.FORBIDDEN).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Cyclical relationships are not allowed, please change the parent organization, current Parent: " + parentOrg.getName()).build();
172
+ }
160173 }
161174
162175 List<User> users = null;
....@@ -165,8 +178,8 @@
165178 users = new ArrayList<>();
166179 for (String username : usersIds) {
167180 User user = em.find(User.class, username);
168
- if (parentOrg == null) {
169
- log.error("Organization user with id {} not found in DB", username);
181
+ if (user == null) {
182
+ log.error("Organization user with id '{}' not found in DB", username);
170183 return Response.status(Status.NOT_FOUND).header(SecurisErrorHandler.HEADER_ERROR_MESSAGE, "Organization's user not found with ID: " + username).build();
171184 }
172185 users.add(user);