From 408ad5e7031a0181e040057c298da0251077b26f Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Mon, 5 Jun 2023 17:39:49 +0530 Subject: [PATCH] assessment read api enhancement --- .../controller/AssessmentController.java | 5 ++-- .../service/AssessmentServiceV2.java | 2 +- .../service/AssessmentServiceV2Impl.java | 24 ++++++++++++++++++- .../org/sunbird/common/util/Constants.java | 3 +++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/sunbird/assessment/controller/AssessmentController.java b/src/main/java/org/sunbird/assessment/controller/AssessmentController.java index c2bd3056c..e328e7523 100644 --- a/src/main/java/org/sunbird/assessment/controller/AssessmentController.java +++ b/src/main/java/org/sunbird/assessment/controller/AssessmentController.java @@ -136,8 +136,9 @@ public ResponseEntity submitUserAssessmentV3(@Valid @RequestBody Map readAssessment( @PathVariable("assessmentIdentifier") String assessmentIdentifier, - @RequestHeader(Constants.X_AUTH_TOKEN) String token) throws Exception { - SBApiResponse readResponse = assessmentServiceV2.readAssessment(assessmentIdentifier, token); + @RequestHeader(Constants.X_AUTH_TOKEN) String token, + @RequestHeader(value = Constants.X_AUTH_USER_ORG_ID, required = false) String rootOrgId) throws Exception { + SBApiResponse readResponse = assessmentServiceV2.readAssessment(assessmentIdentifier, token, rootOrgId); return new ResponseEntity<>(readResponse, readResponse.getResponseCode()); } diff --git a/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2.java b/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2.java index e6159dbfd..f3b778fcc 100644 --- a/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2.java +++ b/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2.java @@ -14,7 +14,7 @@ public interface AssessmentServiceV2 { */ public SBApiResponse submitAssessment(Map data, String userEmail) throws Exception; - public SBApiResponse readAssessment(String assessmentIdentifier, String token) throws Exception; + public SBApiResponse readAssessment(String assessmentIdentifier, String token, String rootOrgId) throws Exception; public SBApiResponse readQuestionList(Map requestBody, String authUserToken) throws Exception; diff --git a/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2Impl.java b/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2Impl.java index 4215d5372..6716092e8 100644 --- a/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2Impl.java +++ b/src/main/java/org/sunbird/assessment/service/AssessmentServiceV2Impl.java @@ -60,7 +60,7 @@ public class AssessmentServiceV2Impl implements AssessmentServiceV2 { @Autowired ObjectMapper mapper; - public SBApiResponse readAssessment(String assessmentIdentifier, String token) { + public SBApiResponse readAssessment(String assessmentIdentifier, String token, String rootOrgId) { logger.info("AssessmentServiceV2Impl::readAssessment... Started"); SBApiResponse response = createDefaultResponse(Constants.API_QUESTIONSET_HIERARCHY_GET); String errMsg; @@ -70,6 +70,13 @@ public SBApiResponse readAssessment(String assessmentIdentifier, String token) { logger.info("readAssessment.. userId :" + userId); Map assessmentAllDetail = new HashMap<>(); errMsg = fetchReadHierarchyDetails(assessmentAllDetail, token, assessmentIdentifier); + boolean hasAccess = validateSecureSettings(assessmentAllDetail, rootOrgId); + if (!hasAccess) { + response.getParams().setStatus(Constants.FAILED); + response.getParams().setErrmsg(Constants.USER_DOES_NOT_HAVE_ACCESS); + response.setResponseCode(HttpStatus.NOT_FOUND); + return response; + } if (errMsg.isEmpty() && !((String) assessmentAllDetail.get(Constants.PRIMARY_CATEGORY)).equalsIgnoreCase(Constants.PRACTICE_QUESTION_SET)) { logger.info("Fetched assessment Details... for : " + assessmentIdentifier); List> existingDataList = assessmentRepository.fetchUserAssessmentDataFromDB(userId, assessmentIdentifier); @@ -745,4 +752,19 @@ private int calculateAssessmentRetakeCount(List> userAssessm Iterables.removeIf(values, Predicates.isNull()); return values.size(); } + + private boolean validateSecureSettings(Map assessmentAllDetail, String rootOrgId) { + List organizationIds = new ArrayList<>(); + Optional.ofNullable((String) assessmentAllDetail.get(Constants.SECURE_SETTINGS)) + .ifPresent(jsonString -> { + try { + ObjectMapper objectMapper = new ObjectMapper(); + Map secureSettings = objectMapper.readValue(jsonString, Map.class); + organizationIds.addAll((List) secureSettings.get(Constants.ORGANISATION)); + } catch (Exception e) { + e.printStackTrace(); + } + }); + return organizationIds.isEmpty() || organizationIds.contains(rootOrgId); + } } \ No newline at end of file diff --git a/src/main/java/org/sunbird/common/util/Constants.java b/src/main/java/org/sunbird/common/util/Constants.java index eb0df5d5f..2c175e64d 100644 --- a/src/main/java/org/sunbird/common/util/Constants.java +++ b/src/main/java/org/sunbird/common/util/Constants.java @@ -679,6 +679,9 @@ public class Constants { public static final String GROUP = "group"; public static final String BULK_USER_CREATE_API_FAILED = "Bulk User Create API Failed"; public static final String BULK_USER_UPDATE_API_FAILED = "Bulk User Update API Failed"; + public static final String USER_DOES_NOT_HAVE_ACCESS = "User doesn't have access to this assessment :"; + public static final String SECURE_SETTINGS = "secureSettings"; + public static final String ORGANISATION = "organisation"; private Constants() { throw new IllegalStateException("Utility class"); }