Skip to content
Snippets Groups Projects
Commit feacb3b1 authored by Pavel Šeda's avatar Pavel Šeda
Browse files

Merge branch...

Merge branch '25-create-new-endpoint-for-assigning-and-removing-groups-to-from-microservices' into 'master'

Resolve "Create new endpoint for assigning and removing groups to/from microservices"

Closes #25

See merge request kypo2/services-and-portlets/kypo2-user-and-group!25
parents a36b3020 6cfccf53
Branches
Tags
No related merge requests found
package cz.muni.ics.kypo.userandgroup.api.dto;
import cz.muni.ics.kypo.userandgroup.api.dto.enums.AssignRoleToGroupStatusDTO;
import org.springframework.http.HttpStatus;
import java.util.Objects;
public class ResponseRoleToGroupInMicroservicesDTO {
private Long roleId;
private Long microserviceId;
private AssignRoleToGroupStatusDTO status;
private String responseMessage;
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public Long getMicroserviceId() {
return microserviceId;
}
public void setMicroserviceId(Long microserviceId) {
this.microserviceId = microserviceId;
}
public AssignRoleToGroupStatusDTO getStatus() {
return status;
}
public void setStatus(AssignRoleToGroupStatusDTO status) {
this.status = status;
}
public String getResponseMessage() {
return responseMessage;
}
public void setResponseMessage(String responseMessage) {
this.responseMessage = responseMessage;
}
@Override
public String toString() {
return "ResponseRoleToGroupInMicroservicesDTO{" +
"roleId=" + roleId +
", microserviceId=" + microserviceId +
", status=" + status +
", responseMessage='" + responseMessage + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ResponseRoleToGroupInMicroservicesDTO that = (ResponseRoleToGroupInMicroservicesDTO) o;
return Objects.equals(roleId, that.roleId) &&
Objects.equals(microserviceId, that.microserviceId) &&
status == that.status;
}
@Override
public int hashCode() {
return Objects.hash(roleId, microserviceId, status);
}
}
package cz.muni.ics.kypo.userandgroup.api.dto;
import java.util.Objects;
public class RoleAndMicroserviceDTO {
private Long roleId;
private Long microserviceId;
public Long getRoleId() {
return roleId;
}
public void setRoleId(Long roleId) {
this.roleId = roleId;
}
public Long getMicroserviceId() {
return microserviceId;
}
public void setMicroserviceId(Long microserviceId) {
this.microserviceId = microserviceId;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RoleAndMicroserviceDTO that = (RoleAndMicroserviceDTO) o;
return Objects.equals(roleId, that.roleId) &&
Objects.equals(microserviceId, that.microserviceId);
}
@Override
public int hashCode() {
return Objects.hash(roleId, microserviceId);
}
@Override
public String toString() {
return "RolesAndMicroservicesDTO{" +
"roleId=" + roleId +
", microserviceId=" + microserviceId +
'}';
}
}
package cz.muni.ics.kypo.userandgroup.api.dto.enums;
public enum AssignRoleToGroupStatusDTO {
SUCCESS, NOT_FOUND, MICROSERVICE_ERROR, REST_CLIENT_ERROR,
}
package cz.muni.ics.kypo.userandgroup.api.facade; package cz.muni.ics.kypo.userandgroup.api.facade;
import cz.muni.ics.kypo.userandgroup.api.PageResultResource; import cz.muni.ics.kypo.userandgroup.api.PageResultResource;
import cz.muni.ics.kypo.userandgroup.api.dto.ResponseRoleToGroupInMicroservicesDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.RoleAndMicroserviceDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.group.*; import cz.muni.ics.kypo.userandgroup.api.dto.group.*;
import cz.muni.ics.kypo.userandgroup.api.dto.role.RoleDTO; import cz.muni.ics.kypo.userandgroup.api.dto.role.RoleDTO;
import cz.muni.ics.kypo.userandgroup.api.exceptions.ExternalSourceException; import cz.muni.ics.kypo.userandgroup.api.exceptions.ExternalSourceException;
...@@ -129,4 +131,6 @@ public interface IDMGroupFacade { ...@@ -129,4 +131,6 @@ public interface IDMGroupFacade {
*/ */
void removeRoleToGroupInMicroservice(Long groupId, Long roleId, Long microserviceId) throws UserAndGroupFacadeException, void removeRoleToGroupInMicroservice(Long groupId, Long roleId, Long microserviceId) throws UserAndGroupFacadeException,
MicroserviceException, RoleCannotBeRemovedToGroupException; MicroserviceException, RoleCannotBeRemovedToGroupException;
List<ResponseRoleToGroupInMicroservicesDTO> assignRolesInMicroservices(Long groupId, List<RoleAndMicroserviceDTO> rolesAndMicroservices);
} }
...@@ -6,6 +6,8 @@ import com.github.bohnman.squiggly.util.SquigglyUtils; ...@@ -6,6 +6,8 @@ import com.github.bohnman.squiggly.util.SquigglyUtils;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Predicate;
import cz.muni.ics.kypo.userandgroup.api.PageResultResource; import cz.muni.ics.kypo.userandgroup.api.PageResultResource;
import cz.muni.ics.kypo.userandgroup.api.dto.ResponseRoleToGroupInMicroservicesDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.RoleAndMicroserviceDTO;
import cz.muni.ics.kypo.userandgroup.api.exceptions.ExternalSourceException; import cz.muni.ics.kypo.userandgroup.api.exceptions.ExternalSourceException;
import cz.muni.ics.kypo.userandgroup.api.exceptions.MicroserviceException; import cz.muni.ics.kypo.userandgroup.api.exceptions.MicroserviceException;
import cz.muni.ics.kypo.userandgroup.api.exceptions.RoleCannotBeRemovedToGroupException; import cz.muni.ics.kypo.userandgroup.api.exceptions.RoleCannotBeRemovedToGroupException;
...@@ -19,6 +21,7 @@ import cz.muni.ics.kypo.userandgroup.rest.utils.ApiPageableSwagger; ...@@ -19,6 +21,7 @@ import cz.muni.ics.kypo.userandgroup.rest.utils.ApiPageableSwagger;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import io.swagger.models.Response;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -242,6 +245,22 @@ public class GroupsRestController { ...@@ -242,6 +245,22 @@ public class GroupsRestController {
} }
} }
@ApiOperation(httpMethod = "POST",
value = "Assign roles with given roles IDs to group with given ID in chosen microservices"
)
@PostMapping("/{groupId}/roles-collection")
public ResponseEntity<List<ResponseRoleToGroupInMicroservicesDTO>> assignRolesInMicroservices(
@ApiParam(value = "groupId", required = true) @PathVariable("groupId") Long groupId,
@ApiParam(value = "rolesAndMicroservices", required = true) @RequestBody List<RoleAndMicroserviceDTO> rolesAndMicroservices) {
// try {
return new ResponseEntity<>(groupFacade.assignRolesInMicroservices(groupId, rolesAndMicroservices), HttpStatus.OK);
// } catch (UserAndGroupFacadeException e) {
// throw new ResourceNotFoundException("Group with id: " + groupId + " or microserviceservice with id " + ram.getMicroserviceId() + " could not be found.");
// } catch (MicroserviceException e) {
// throw new ServiceUnavailableException(e.getLocalizedMessage());
// }
}
@ApiOperation(httpMethod = "DELETE", @ApiOperation(httpMethod = "DELETE",
value = "Cancel role with given role ID to group with given ID in chosen microservice" value = "Cancel role with given role ID to group with given ID in chosen microservice"
) )
......
...@@ -5,6 +5,9 @@ import com.google.gson.JsonParser; ...@@ -5,6 +5,9 @@ import com.google.gson.JsonParser;
import com.querydsl.core.types.Predicate; import com.querydsl.core.types.Predicate;
import cz.muni.ics.kypo.userandgroup.api.PageResultResource; import cz.muni.ics.kypo.userandgroup.api.PageResultResource;
import cz.muni.ics.kypo.userandgroup.api.dto.MicroserviceForGroupDeletionDTO; import cz.muni.ics.kypo.userandgroup.api.dto.MicroserviceForGroupDeletionDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.ResponseRoleToGroupInMicroservicesDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.RoleAndMicroserviceDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.enums.AssignRoleToGroupStatusDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.enums.GroupDeletionStatusDTO; import cz.muni.ics.kypo.userandgroup.api.dto.enums.GroupDeletionStatusDTO;
import cz.muni.ics.kypo.userandgroup.api.dto.group.*; import cz.muni.ics.kypo.userandgroup.api.dto.group.*;
import cz.muni.ics.kypo.userandgroup.api.dto.role.RoleDTO; import cz.muni.ics.kypo.userandgroup.api.dto.role.RoleDTO;
...@@ -301,6 +304,52 @@ public class IDMGroupFacadeImpl implements IDMGroupFacade { ...@@ -301,6 +304,52 @@ public class IDMGroupFacadeImpl implements IDMGroupFacade {
throw new UserAndGroupFacadeException(e); throw new UserAndGroupFacadeException(e);
} }
} }
@Override
public List<ResponseRoleToGroupInMicroservicesDTO> assignRolesInMicroservices(Long groupId, List<RoleAndMicroserviceDTO> rolesAndMicroservices) {
Assert.notNull(groupId, "Input groupId must not be null");
Assert.notNull(rolesAndMicroservices, "Input roles and microservices must not be null");
List<ResponseRoleToGroupInMicroservicesDTO> responses = new ArrayList<>();
for (RoleAndMicroserviceDTO ram : rolesAndMicroservices) {
ResponseRoleToGroupInMicroservicesDTO resp = new ResponseRoleToGroupInMicroservicesDTO();
resp.setRoleId(ram.getRoleId());
resp.setMicroserviceId(ram.getMicroserviceId());
try {
Microservice microservice = microserviceService.get(ram.getMicroserviceId());
groupService.get(groupId);
if (microservice.getName().equals(NAME_OF_USER_AND_GROUP_SERVICE)) {
groupService.assignRole(groupId, roleService.getById(ram.getRoleId()).getRoleType());
resp.setStatus(AssignRoleToGroupStatusDTO.SUCCESS);
} else {
final String url = microservice.getEndpoint() + "/groups/{groupId}/roles/{roleId}";
OAuth2AuthenticationDetails auth = (OAuth2AuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails();
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization", auth.getTokenType() + " " + auth.getTokenValue());
HttpEntity<String> entity = new HttpEntity<>(null, headers);
try {
ResponseEntity<Void> responseEntity = restTemplate.exchange(url, HttpMethod.POST, entity, Void.class, groupId, ram.getRoleId());
if (!responseEntity.getStatusCode().is2xxSuccessful()) {
resp.setStatus(AssignRoleToGroupStatusDTO.MICROSERVICE_ERROR);
resp.setResponseMessage("Status code: " + responseEntity.getStatusCode().toString() + " Body: " + responseEntity.getBody());
}
resp.setStatus(AssignRoleToGroupStatusDTO.SUCCESS);
} catch (HttpClientErrorException e) {
resp.setStatus(AssignRoleToGroupStatusDTO.MICROSERVICE_ERROR);
resp.setResponseMessage("Cannot assign role to group in given microservice. It is return status code: " + e.getStatusCode() + ".");
} catch (RestClientException e) {
resp.setStatus(AssignRoleToGroupStatusDTO.REST_CLIENT_ERROR);
resp.setResponseMessage(e.getCause().getMessage());
}
}
} catch (UserAndGroupServiceException e) {
resp.setStatus(AssignRoleToGroupStatusDTO.NOT_FOUND);
resp.setResponseMessage(e.getMessage());
}
responses.add(resp);
}
return responses;
}
@Override @Override
public boolean isGroupInternal(Long id) throws UserAndGroupFacadeException { public boolean isGroupInternal(Long id) throws UserAndGroupFacadeException {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment