Select Git revision
GetAccessApiController.java
GetAccessApiController.java 7.11 KiB
package com.tecnalia.DVPolicyEngine.api;
import com.tecnalia.DVPolicyEngine.model.Access;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tecnalia.DVPolicyEngine.model.Input;
import com.tecnalia.DVPolicyEngine.service.PolicyService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.enums.ParameterIn;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.media.ArraySchema;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.*;
import javax.validation.Valid;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.SpringCodegen", date = "2021-07-16T07:58:35.159Z[GMT]")
@RestController
public class GetAccessApiController implements GetAccessApi {
private static final Logger log = LoggerFactory.getLogger(GetAccessApiController.class);
private final ObjectMapper objectMapper;
private final HttpServletRequest request;
@Autowired
private PolicyService policyService;
@org.springframework.beans.factory.annotation.Autowired
public GetAccessApiController(ObjectMapper objectMapper, HttpServletRequest request) {
this.objectMapper = objectMapper;
this.request = request;
}
public ResponseEntity<List<Access>> getAccessByAttributes(@Parameter(in = ParameterIn.DEFAULT, description = "", required=true, schema=@Schema()) @Valid @RequestBody Input body) {
// public ResponseEntity<List<Access>> getAccessByAttributes(@NotNull @Parameter(in = ParameterIn.QUERY, description = "" ,required=true,schema=@Schema()) @Valid @RequestParam(value = "DatasetID_list", required = true) List<String> datasetIDList,@NotNull @Parameter(in = ParameterIn.QUERY, description = "" ,required=true,schema=@Schema()) @Valid @RequestParam(value = "DataSeekerID", required = true) String dataSeekerID) {
String accept = request.getHeader("Accept");
String dataSeekerID="";
String organizationAttributesAsString="";
List<String> datasetIDList=null;
/* 1.-GetDataSeekersOrganisationPolicy (DataSeekerID) -> de aqui obtenemos los atributos de la organización
*/
/* {
"dataseekerID":"462626262",
"DatasetIDs":[
"1421515",
"616266262"
]
}*/ try{
dataSeekerID=body.getDataseekerID();
organizationAttributesAsString=policyService.getDataSeekersOrganizationPolicy(dataSeekerID);
// organizationAttributesAsString="{\"name\":\"Test Organization\",\"sector\":\"Test Sector\",\"continent\":\"EU\",\"country\":\"GRE\",\"type\":\"Private Entity\",\"size\":\"medium\",\"reputation\":7}";
System.out.println("organizationAttributesAsString:"+organizationAttributesAsString);
datasetIDList=new ArrayList<String>();
datasetIDList=body.getDatasetIDs();
}
catch(Exception e){
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
// organizationAttributesAsString="{\"name\":\"Test Organization\",\"sector\":\"Test Sector\",\"continent\":\"EU\",\"country\":\"GRE\",\"type\":\"Private Entity\",\"size\":\"medium\",\"reputation\":7}";
/*"
2.- GetDatasetPolicies (DatasetID) -> de aqui obtendremos la politica con la siguiente información. -> llamada a API blockchain
struct access_policy {
string[] Sector;
string[] Continent;
string[] Country;
string[] Type;
string[] Size;
string[] Reputation_Score;
}
*/
JSONObject organizationAttributesJson = null;
JSONObject accessPolicyAsJSON = null;
List<Access> listAccess =new ArrayList<Access>();
try{
organizationAttributesJson=new JSONObject(organizationAttributesAsString);
for (String datasetID : datasetIDList) {
String accessPolicyasString=policyService.getDatasetPolicy(datasetID);
//String accessPolicyasString="{\"Continent\":[\"testContinent\",\"test2Continent\"],\"Type\":[\"testType\",\"test2Type\"],\"Sector\":[\"testSector\",\"test2Sector\"],\"Size\":[\"testSize\",\"test2Size\"],\"Country\":[\"testCountry\",\"test2Country\"],\"Reputation\":0}";
try
{
accessPolicyAsJSON = new JSONObject(accessPolicyasString);
System.out.println("accessPolicyasString:"+accessPolicyasString);
// 3.-Comparar los atributos de la organización con los de la politica y construir el objeto Access y añadirlo a la lista
Access access=policyService.checkAtributesInPolicy( datasetID, organizationAttributesJson, accessPolicyAsJSON);
if (access!=null)
listAccess.add(access);
}
catch(Exception e){
Access access=new Access();
access.datasetID(datasetID);
access.setGranted(Boolean.FALSE);
access.setNonConformities(accessPolicyasString);
listAccess.add(access);
//return new ResponseEntity<List<Access>>(listAccess, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}catch (Exception e){
return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<List<Access>>(listAccess, HttpStatus.OK);
}
}