Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
import org.brapi.v2.model.germ.response.BrAPIGermplasmPedigreeResponse;
import org.brapi.v2.model.germ.response.BrAPIGermplasmProgenyResponse;
import org.breedinginsight.api.auth.ProgramSecured;
import org.breedinginsight.api.auth.ProgramSecuredRole;
import org.breedinginsight.api.auth.ProgramSecuredRoleGroup;
import org.breedinginsight.api.auth.SecurityService;
import org.breedinginsight.api.model.v1.request.query.SearchRequest;
import org.breedinginsight.api.model.v1.response.DataResponse;
import org.breedinginsight.api.model.v1.response.Response;
Expand All @@ -41,7 +43,9 @@
import org.breedinginsight.model.DownloadFile;
import org.breedinginsight.model.GermplasmGenotype;
import org.breedinginsight.model.Program;
import org.breedinginsight.model.ProgramUser;
import org.breedinginsight.services.ProgramService;
import org.breedinginsight.services.ProgramUserService;
import org.breedinginsight.services.brapi.BrAPIEndpointProvider;
import org.breedinginsight.services.exceptions.AuthorizationException;
import org.breedinginsight.services.exceptions.DoesNotExistException;
Expand Down Expand Up @@ -71,6 +75,8 @@ public class BrAPIGermplasmController {

private final BrAPIEndpointProvider brAPIEndpointProvider;

private final SecurityService securityService;
private final ProgramUserService programUserService;

@Inject
public BrAPIGermplasmController(@Property(name = "brapi.server.reference-source") String referenceSource,
Expand All @@ -80,7 +86,9 @@ public BrAPIGermplasmController(@Property(name = "brapi.server.reference-source"
BrAPIGermplasmDAO germplasmDAO,
GenotypeService genoService,
BrAPIEndpointProvider brAPIEndpointProvider,
ProgramService programService) {
ProgramService programService,
SecurityService securityService,
ProgramUserService programUserService) {
this.referenceSource = referenceSource;
this.germplasmService = germplasmService;
this.germplasmQueryMapper = germplasmQueryMapper;
Expand All @@ -89,6 +97,8 @@ public BrAPIGermplasmController(@Property(name = "brapi.server.reference-source"
this.genoService = genoService;
this.brAPIEndpointProvider = brAPIEndpointProvider;
this.programService = programService;
this.securityService = securityService;
this.programUserService = programUserService;
}

// NOTE: bypasses cache and makes api request directly to brapi service
Expand Down Expand Up @@ -196,7 +206,8 @@ private void batchProcessGermplasm(List<BrAPIGermplasm> germplasmList, String pr

@Get("/programs/{programId}" + BrapiVersion.BRAPI_V2 + "/germplasm{?queryParams*}")
@Produces(MediaType.APPLICATION_JSON)
@ProgramSecured(roleGroups = {ProgramSecuredRoleGroup.PROGRAM_SCOPED_ROLES})
@ProgramSecured(roles = {ProgramSecuredRole.SYSTEM_ADMIN, ProgramSecuredRole.READ_ONLY, ProgramSecuredRole.PROGRAM_ADMIN
,ProgramSecuredRole.EXPERIMENTAL_COLLABORATOR })
public HttpResponse<Response<DataResponse<List<BrAPIGermplasm>>>> getGermplasm(
@PathVariable("programId") UUID programId,
@QueryValue @QueryValid(using = GermplasmQueryMapper.class) @Valid GermplasmQuery queryParams) {
Expand All @@ -209,6 +220,15 @@ public HttpResponse<Response<DataResponse<List<BrAPIGermplasm>>>> getGermplasm(
germplasmQueryMapper.setDateDisplayFormat(dateFormatParam);
}

//If experimental collaborator, 403 error should be returned
//Handled this way due to FieldBook field import involving a germplasm endpoint call
Optional<ProgramUser> experimentalCollaborator = programUserService.getIfExperimentalCollaborator(programId, securityService.getUser().getId());
if (experimentalCollaborator.isPresent()) {
log.info("Experimental Collaborator cannot retrieve germplasm");
return HttpResponse.status(HttpStatus.FORBIDDEN, "Experimental Collaborator cannot retrieve germplasm");

}

// Fetch all germplasm in the program unless a list id is supplied to return only germplasm in that collection
List<BrAPIGermplasm> germplasm = queryParams.getListDbId() == null ? germplasmService.getGermplasm(programId) : germplasmService.getGermplasmByList(programId, queryParams.getListDbId());
SearchRequest searchRequest = queryParams.constructSearchRequest();
Expand Down
Loading