From 18c93ef423cd74f59d05bfb2a119adea920058ff Mon Sep 17 00:00:00 2001 From: Manas-tarento <107806230+Manas-tarento@users.noreply.github.com> Date: Mon, 29 May 2023 17:52:04 +0530 Subject: [PATCH 01/17] enrol and unenroll api latest changes (#43) * enrol and unenroll api latest changes --- .../enrolments/CourseEnrolmentActor.scala | 77 ++++++++++++++++--- .../common/responsecode/ResponseCode.java | 2 +- .../common/responsecode/ResponseMessage.java | 2 + 3 files changed, 68 insertions(+), 13 deletions(-) diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index 0bb90367d..59402f63a 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -82,12 +82,17 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c val enrolmentData: UserCourses = userCoursesDao.read(request.getRequestContext, userId, courseId, batchId) validateEnrolment(batchData, enrolmentData, true) val data: java.util.Map[String, AnyRef] = createUserEnrolmentMap(userId, courseId, batchId, enrolmentData, request.getContext.getOrDefault(JsonKey.REQUEST_ID, "").asInstanceOf[String]) - upsertEnrollment(userId, courseId, batchId, data, (null == enrolmentData), request.getRequestContext) - logger.info(request.getRequestContext, "CourseEnrolmentActor :: enroll :: Deleting redis for key " + getCacheKey(userId)) - cacheUtil.delete(getCacheKey(userId)) - sender().tell(successResponse(), self) - generateTelemetryAudit(userId, courseId, batchId, data, "enrol", JsonKey.CREATE, request.getContext) - notifyUser(userId, batchData, JsonKey.ADD) + val hasAccess = validateCourseSecureSettings(courseId, request) + if (hasAccess) { + upsertEnrollment(userId, courseId, batchId, data, (null == enrolmentData), request.getRequestContext) + logger.info(request.getRequestContext, "CourseEnrolmentActor :: enroll :: Deleting redis for key " + getCacheKey(userId)) + cacheUtil.delete(getCacheKey(userId)) + sender().tell(successResponse(), self) + generateTelemetryAudit(userId, courseId, batchId, data, "enrol", JsonKey.CREATE, request.getContext) + notifyUser(userId, batchData, JsonKey.ADD) + } else { + ProjectCommonException.throwClientErrorException(ResponseCode.accessDeniedToEnrolOrUnenrolCourse, courseId) + } } @@ -100,12 +105,17 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c getUpdatedStatus(enrolmentData) validateEnrolment(batchData, enrolmentData, false) val data: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() {{ put(JsonKey.ACTIVE, ProjectUtil.ActiveStatus.INACTIVE.getValue.asInstanceOf[AnyRef]) }} - upsertEnrollment(userId,courseId, batchId, data, false, request.getRequestContext) - logger.info(request.getRequestContext, "CourseEnrolmentActor :: unEnroll :: Deleting redis for key " + getCacheKey(userId)) - cacheUtil.delete(getCacheKey(userId)) - sender().tell(successResponse(), self) - generateTelemetryAudit(userId, courseId, batchId, data, "unenrol", JsonKey.UPDATE, request.getContext) - notifyUser(userId, batchData, JsonKey.REMOVE) + val hasAccess = validateCourseSecureSettings(courseId, request) + if (hasAccess) { + upsertEnrollment(userId, courseId, batchId, data, false, request.getRequestContext) + logger.info(request.getRequestContext, "CourseEnrolmentActor :: unEnroll :: Deleting redis for key " + getCacheKey(userId)) + cacheUtil.delete(getCacheKey(userId)) + sender().tell(successResponse(), self) + generateTelemetryAudit(userId, courseId, batchId, data, "unenrol", JsonKey.UPDATE, request.getContext) + notifyUser(userId, batchData, JsonKey.REMOVE) + } else { + ProjectCommonException.throwClientErrorException(ResponseCode.accessDeniedToEnrolOrUnenrolCourse, courseId) + } } def list(request: Request): Unit = { @@ -345,6 +355,49 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c } else 0} enrolmentData.setStatus(getCompletionStatus(enrolmentData.getProgress, leafNodesCount)) } + + private def validateCourseSecureSettings(courseId: String, request: Request): Boolean = { + val requestBody: String = prepareContentSearchRequest(courseId, request) + val searchResult: java.util.Map[String, AnyRef] = ContentSearchUtil.searchContentSync(request.getRequestContext, request.getContext.getOrDefault(JsonKey.URL_QUERY_STRING, "").asInstanceOf[String], requestBody, request.get(JsonKey.HEADER).asInstanceOf[java.util.Map[String, String]]) + val coursesList: java.util.List[java.util.Map[String, AnyRef]] = searchResult.getOrDefault(JsonKey.CONTENTS, new java.util.ArrayList[java.util.Map[String, AnyRef]]()).asInstanceOf[java.util.List[java.util.Map[String, AnyRef]]] + val organizationIds = new java.util.ArrayList[String]() + coursesList.asScala.foreach { course => + val secureSettingsOption = Option(course.get("secureSettings").asInstanceOf[java.util.Map[String, AnyRef]]) + secureSettingsOption.foreach { secureSettings => + Option(secureSettings.get("organisation")) match { + case Some(ids: java.util.List[String]) => + organizationIds.addAll(ids) + case _ => + } + } + } + val userChannelId: String = request.getRequest.getOrDefault("x-user-channel-id", "").asInstanceOf[String] + val hasAccess = organizationIds.isEmpty || organizationIds.contains(userChannelId) + hasAccess + } + + private def prepareContentSearchRequest(courseIds: String, request: Request): String = { + val filters: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() { + { + put(JsonKey.IDENTIFIER, java.util.Collections.singletonList(courseIds)) + put(JsonKey.STATUS, "Live") + put(JsonKey.MIME_TYPE, JsonKey.COLLECTION_MIME_TYPE) + put(JsonKey.TRACKABLE_ENABLED, JsonKey.YES) + putAll(request.getRequest.getOrDefault(JsonKey.FILTERS, new java.util.HashMap[String, AnyRef]).asInstanceOf[java.util.Map[String, AnyRef]]) + } + } + val searchRequest: java.util.Map[String, java.util.Map[String, AnyRef]] = new java.util.HashMap[String, java.util.Map[String, AnyRef]]() { + { + put(JsonKey.REQUEST, new java.util.HashMap[String, AnyRef]() { + { + put(JsonKey.FILTERS, filters) + put(JsonKey.LIMIT, 1.asInstanceOf[AnyRef]) + } + }) + } + } + new ObjectMapper().writeValueAsString(searchRequest) + } } diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseCode.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseCode.java index 09974387b..0116b2d3a 100644 --- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseCode.java +++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseCode.java @@ -832,7 +832,7 @@ public enum ResponseCode { cannotUpdateEventSetHavingEnrollments( ResponseMessage.Key.CANNOT_UPDATE_EVENT_SET_HAVING_ENROLLMENTS, ResponseMessage.Message.CANNOT_UPDATE_EVENT_SET_HAVING_ENROLLMENTS), - + accessDeniedToEnrolOrUnenrolCourse(ResponseMessage.Key.USER_DOES_NOT_HAVE_ACCESS,ResponseMessage.Message.USER_DOES_NOT_HAVE_ACCESS), OK(200), CLIENT_ERROR(400), SERVER_ERROR(500), diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseMessage.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseMessage.java index 0331e505e..11aceb164 100644 --- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseMessage.java +++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/responsecode/ResponseMessage.java @@ -459,6 +459,7 @@ interface Message { String ERR_CALLING_GROUP_API = "Error while calling group api."; String MISSING_FIXED_BATCH_ID = "Missing Fixed Batch Id."; String CANNOT_UPDATE_EVENT_SET_HAVING_ENROLLMENTS = "Cannot update event set having enrollments."; + String USER_DOES_NOT_HAVE_ACCESS = "User doesn't have access to this Course Id"; } interface Key { @@ -846,5 +847,6 @@ interface Key { String ERR_CALLING_GROUP_API = "ERR_CALLING_GROUOP_API"; String MISSING_FIXED_BATCH_ID = "MISSING_FIXED_BATCH_ID"; String CANNOT_UPDATE_EVENT_SET_HAVING_ENROLLMENTS = "CANNOT_UPDATE_EVENT_SET_HAVING_ENROLLMENTS"; + String USER_DOES_NOT_HAVE_ACCESS = "USER_DOES_NOT_HAVE_ACCESS"; } } From 0150720b641cc52eaa55ce580fe5628d8a2c5a5e Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Tue, 30 May 2023 12:45:51 +0530 Subject: [PATCH 02/17] fixed --- .../scala/org/sunbird/enrolments/CourseEnrolmentActor.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index 59402f63a..c563c8623 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -376,10 +376,10 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c hasAccess } - private def prepareContentSearchRequest(courseIds: String, request: Request): String = { + private def prepareContentSearchRequest(courseId: String, request: Request): String = { val filters: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() { { - put(JsonKey.IDENTIFIER, java.util.Collections.singletonList(courseIds)) + put(JsonKey.IDENTIFIER, courseId) put(JsonKey.STATUS, "Live") put(JsonKey.MIME_TYPE, JsonKey.COLLECTION_MIME_TYPE) put(JsonKey.TRACKABLE_ENABLED, JsonKey.YES) From d9a65fcc2fb44d49c5e0be3f554ccda458d44f62 Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Mon, 5 Jun 2023 22:15:57 +0530 Subject: [PATCH 03/17] fixed --- .../org/sunbird/learner/util/ContentUtil.java | 22 +++++++++ .../enrolments/CourseEnrolmentActor.scala | 48 ++----------------- 2 files changed, 25 insertions(+), 45 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 8576d4ef2..2805b1310 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -197,4 +197,26 @@ public static boolean updateCollection(RequestContext requestContext, String col } return JsonKey.SUCCESS.equalsIgnoreCase(response); } + + public static boolean getContentRead(String courseId) { + Map headers = new HashMap<>(); + boolean flag = false; + try { + String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; + headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); + logger.info(null, "making call for content read ==" + courseId); + String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); + logger.info(null, "Content read response", null, new HashMap<>() {{ + put("response", response); + }}); + Map data = mapper.readValue(response, Map.class); + if (data.get("responseCode").equals("OK")) { + logger.info(null, "inside if condition checking response code " + data); + flag = true; + } + } catch (Exception e) { + logger.error(null, "User don't have access to this courseId " + courseId, e); + } + return flag; + } } diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index c563c8623..13cc00a50 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -82,7 +82,8 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c val enrolmentData: UserCourses = userCoursesDao.read(request.getRequestContext, userId, courseId, batchId) validateEnrolment(batchData, enrolmentData, true) val data: java.util.Map[String, AnyRef] = createUserEnrolmentMap(userId, courseId, batchId, enrolmentData, request.getContext.getOrDefault(JsonKey.REQUEST_ID, "").asInstanceOf[String]) - val hasAccess = validateCourseSecureSettings(courseId, request) + val hasAccess = ContentUtil.getContentRead(courseId) + logger.info(null,"value of hasaccess "+hasAccess) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, (null == enrolmentData), request.getRequestContext) logger.info(request.getRequestContext, "CourseEnrolmentActor :: enroll :: Deleting redis for key " + getCacheKey(userId)) @@ -105,7 +106,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c getUpdatedStatus(enrolmentData) validateEnrolment(batchData, enrolmentData, false) val data: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() {{ put(JsonKey.ACTIVE, ProjectUtil.ActiveStatus.INACTIVE.getValue.asInstanceOf[AnyRef]) }} - val hasAccess = validateCourseSecureSettings(courseId, request) + val hasAccess = ContentUtil.getContentRead(courseId) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, false, request.getRequestContext) logger.info(request.getRequestContext, "CourseEnrolmentActor :: unEnroll :: Deleting redis for key " + getCacheKey(userId)) @@ -355,49 +356,6 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c } else 0} enrolmentData.setStatus(getCompletionStatus(enrolmentData.getProgress, leafNodesCount)) } - - private def validateCourseSecureSettings(courseId: String, request: Request): Boolean = { - val requestBody: String = prepareContentSearchRequest(courseId, request) - val searchResult: java.util.Map[String, AnyRef] = ContentSearchUtil.searchContentSync(request.getRequestContext, request.getContext.getOrDefault(JsonKey.URL_QUERY_STRING, "").asInstanceOf[String], requestBody, request.get(JsonKey.HEADER).asInstanceOf[java.util.Map[String, String]]) - val coursesList: java.util.List[java.util.Map[String, AnyRef]] = searchResult.getOrDefault(JsonKey.CONTENTS, new java.util.ArrayList[java.util.Map[String, AnyRef]]()).asInstanceOf[java.util.List[java.util.Map[String, AnyRef]]] - val organizationIds = new java.util.ArrayList[String]() - coursesList.asScala.foreach { course => - val secureSettingsOption = Option(course.get("secureSettings").asInstanceOf[java.util.Map[String, AnyRef]]) - secureSettingsOption.foreach { secureSettings => - Option(secureSettings.get("organisation")) match { - case Some(ids: java.util.List[String]) => - organizationIds.addAll(ids) - case _ => - } - } - } - val userChannelId: String = request.getRequest.getOrDefault("x-user-channel-id", "").asInstanceOf[String] - val hasAccess = organizationIds.isEmpty || organizationIds.contains(userChannelId) - hasAccess - } - - private def prepareContentSearchRequest(courseId: String, request: Request): String = { - val filters: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() { - { - put(JsonKey.IDENTIFIER, courseId) - put(JsonKey.STATUS, "Live") - put(JsonKey.MIME_TYPE, JsonKey.COLLECTION_MIME_TYPE) - put(JsonKey.TRACKABLE_ENABLED, JsonKey.YES) - putAll(request.getRequest.getOrDefault(JsonKey.FILTERS, new java.util.HashMap[String, AnyRef]).asInstanceOf[java.util.Map[String, AnyRef]]) - } - } - val searchRequest: java.util.Map[String, java.util.Map[String, AnyRef]] = new java.util.HashMap[String, java.util.Map[String, AnyRef]]() { - { - put(JsonKey.REQUEST, new java.util.HashMap[String, AnyRef]() { - { - put(JsonKey.FILTERS, filters) - put(JsonKey.LIMIT, 1.asInstanceOf[AnyRef]) - } - }) - } - } - new ObjectMapper().writeValueAsString(searchRequest) - } } From f309924ad9859e2c2d8d2af1a9de6b004f0d2082 Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Mon, 5 Jun 2023 22:32:43 +0530 Subject: [PATCH 04/17] fixed --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 2805b1310..8c4649ecd 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -202,7 +202,7 @@ public static boolean getContentRead(String courseId) { Map headers = new HashMap<>(); boolean flag = false; try { - String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; + String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v1/read/" + courseId; headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); logger.info(null, "making call for content read ==" + courseId); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); From 8454b44916fffe3479edc9ca25cafcbeabbd67da Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Mon, 5 Jun 2023 23:20:27 +0530 Subject: [PATCH 05/17] fixed --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 8c4649ecd..298b40fbf 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -202,9 +202,10 @@ public static boolean getContentRead(String courseId) { Map headers = new HashMap<>(); boolean flag = false; try { - String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v1/read/" + courseId; + String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); logger.info(null, "making call for content read ==" + courseId); + logger.info(null, "url "+baseContentreadUrl+" header "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); logger.info(null, "Content read response", null, new HashMap<>() {{ put("response", response); From 0a84b11488eef02777a81084735b7741f2d1ff42 Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Tue, 6 Jun 2023 07:59:24 +0530 Subject: [PATCH 06/17] null check --- .../java/org/sunbird/learner/util/ContentUtil.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 298b40fbf..12d1f6fd3 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -207,13 +207,13 @@ public static boolean getContentRead(String courseId) { logger.info(null, "making call for content read ==" + courseId); logger.info(null, "url "+baseContentreadUrl+" header "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); - logger.info(null, "Content read response", null, new HashMap<>() {{ - put("response", response); - }}); - Map data = mapper.readValue(response, Map.class); - if (data.get("responseCode").equals("OK")) { - logger.info(null, "inside if condition checking response code " + data); - flag = true; + logger.info(null,"Content read response: " + Map.of("response", response)); + if (response != null && !response.isEmpty()) { + Map data = mapper.readValue(response, Map.class); + if (data.get("responseCode").equals("OK")) { + logger.info(null, "inside if condition checking response code " + data); + flag = true; + } } } catch (Exception e) { logger.error(null, "User don't have access to this courseId " + courseId, e); From ae32ccb67911e5e11b325301545f5c5be65d71a9 Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Tue, 6 Jun 2023 10:10:41 +0530 Subject: [PATCH 07/17] null check --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 1 + 1 file changed, 1 insertion(+) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 12d1f6fd3..9ef4ea16d 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -204,6 +204,7 @@ public static boolean getContentRead(String courseId) { try { String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); + headers.put("x-authenticated-user-orgid" , "01354260729811763220"); logger.info(null, "making call for content read ==" + courseId); logger.info(null, "url "+baseContentreadUrl+" header "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); From cc9f6ca7a01f9dbfcb9e9b2459dc0821c8518025 Mon Sep 17 00:00:00 2001 From: Manas-tarento Date: Tue, 6 Jun 2023 11:35:43 +0530 Subject: [PATCH 08/17] added logger --- .../java/org/sunbird/cassandraimpl/CassandraOperationImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java b/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java index 45a1e2215..a0b645331 100644 --- a/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java +++ b/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java @@ -454,8 +454,10 @@ public Response getRecordByIdentifier( }); } logger.debug(requestContext, selectWhere.getQueryString()); + logger.info(null,"cassandra query=="+ selectWhere.getQueryString()); ResultSet results = session.execute(selectWhere); response = CassandraUtil.createResponse(results); + logger.info(null,"Cassandra response "+response); } catch (Exception e) { logger.error(requestContext, Constants.EXCEPTION_MSG_FETCH + tableName + " : " + e.getMessage(), e); throw new ProjectCommonException( From 0957a2c2103120039fdf9d01d4da81e8a4c32938 Mon Sep 17 00:00:00 2001 From: Manas-tarento <107806230+Manas-tarento@users.noreply.github.com> Date: Tue, 6 Jun 2023 15:07:53 +0530 Subject: [PATCH 09/17] list enrol api fix (#51) * list enrol api fix --- .../org/sunbird/learner/util/ContentUtil.java | 6 ++-- .../enrolments/CourseEnrolmentActor.scala | 29 ++++++++++++++----- .../cassandraimpl/CassandraOperationImpl.java | 2 -- .../sunbird/common/models/util/JsonKey.java | 1 + 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 9ef4ea16d..7fab7e6ab 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -198,13 +198,11 @@ public static boolean updateCollection(RequestContext requestContext, String col return JsonKey.SUCCESS.equalsIgnoreCase(response); } - public static boolean getContentRead(String courseId) { - Map headers = new HashMap<>(); + public static boolean getContentRead(String courseId, Request request) { + Map headers = (Map) request.get(JsonKey.HEADER); boolean flag = false; try { String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; - headers.put(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); - headers.put("x-authenticated-user-orgid" , "01354260729811763220"); logger.info(null, "making call for content read ==" + courseId); logger.info(null, "url "+baseContentreadUrl+" header "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index 13cc00a50..ac87cab82 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -82,7 +82,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c val enrolmentData: UserCourses = userCoursesDao.read(request.getRequestContext, userId, courseId, batchId) validateEnrolment(batchData, enrolmentData, true) val data: java.util.Map[String, AnyRef] = createUserEnrolmentMap(userId, courseId, batchId, enrolmentData, request.getContext.getOrDefault(JsonKey.REQUEST_ID, "").asInstanceOf[String]) - val hasAccess = ContentUtil.getContentRead(courseId) + val hasAccess = ContentUtil.getContentRead(courseId, request) logger.info(null,"value of hasaccess "+hasAccess) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, (null == enrolmentData), request.getRequestContext) @@ -106,7 +106,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c getUpdatedStatus(enrolmentData) validateEnrolment(batchData, enrolmentData, false) val data: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() {{ put(JsonKey.ACTIVE, ProjectUtil.ActiveStatus.INACTIVE.getValue.asInstanceOf[AnyRef]) }} - val hasAccess = ContentUtil.getContentRead(courseId) + val hasAccess = ContentUtil.getContentRead(courseId, request) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, false, request.getRequestContext) logger.info(request.getRequestContext, "CourseEnrolmentActor :: unEnroll :: Deleting redis for key " + getCacheKey(userId)) @@ -143,8 +143,8 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c new util.ArrayList[java.util.Map[String, AnyRef]]() } - def addCourseDetails(activeEnrolments: java.util.List[java.util.Map[String, AnyRef]], courseIds: java.util.List[String] , request:Request): java.util.List[java.util.Map[String, AnyRef]] = { - val requestBody: String = prepareSearchRequest(courseIds, request) + def addCourseDetails(activeEnrolments: java.util.List[java.util.Map[String, AnyRef]], courseIds: java.util.List[String] , request:Request, flag:Boolean): java.util.List[java.util.Map[String, AnyRef]] = { + val requestBody: String = prepareSearchRequest(courseIds, request, flag) val searchResult:java.util.Map[String, AnyRef] = ContentSearchUtil.searchContentSync(request.getRequestContext, request.getContext.getOrDefault(JsonKey.URL_QUERY_STRING,"").asInstanceOf[String], requestBody, request.get(JsonKey.HEADER).asInstanceOf[java.util.Map[String, String]]) val coursesList: java.util.List[java.util.Map[String, AnyRef]] = searchResult.getOrDefault(JsonKey.CONTENTS, new java.util.ArrayList[java.util.Map[String, AnyRef]]()).asInstanceOf[java.util.List[java.util.Map[String, AnyRef]]] val coursesMap = { @@ -165,7 +165,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c }).toList.asJava } - def prepareSearchRequest(courseIds: java.util.List[String], request: Request): String = { + def prepareSearchRequest(courseIds: java.util.List[String], request: Request, flag:Boolean): String = { val filters: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() {{ put(JsonKey.IDENTIFIER, courseIds) put(JsonKey.STATUS, "Live") @@ -176,6 +176,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c val searchRequest:java.util.Map[String, java.util.Map[String, AnyRef]] = new java.util.HashMap[String, java.util.Map[String, AnyRef]]() {{ put(JsonKey.REQUEST, new java.util.HashMap[String, AnyRef](){{ put(JsonKey.FILTERS, filters) + put(JsonKey.SECURE_SETTINGS, flag.asInstanceOf[AnyRef]) put(JsonKey.LIMIT, courseIds.size().asInstanceOf[AnyRef]) }}) }} @@ -326,9 +327,21 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c val activeEnrolments: java.util.List[java.util.Map[String, AnyRef]] = getActiveEnrollments( userId, courseIdList, request.getRequestContext) val enrolments: java.util.List[java.util.Map[String, AnyRef]] = { if (CollectionUtils.isNotEmpty(activeEnrolments)) { - val courseIds: java.util.List[String] = activeEnrolments.map(e => e.getOrDefault(JsonKey.COURSE_ID, "").asInstanceOf[String]).distinct.filter(id => StringUtils.isNotBlank(id)).toList.asJava - val enrolmentList: java.util.List[java.util.Map[String, AnyRef]] = addCourseDetails(activeEnrolments, courseIds, request) - val updatedEnrolmentList = updateProgressData(enrolmentList, userId, courseIds, request.getRequestContext) + val allCourseIds: java.util.List[String] = activeEnrolments.map(e => e.getOrDefault(JsonKey.COURSE_ID, "").asInstanceOf[String]).distinct.filter(id => StringUtils.isNotBlank(id)).toList.asJava + val courseIds = new java.util.ArrayList[String]() + val secureCourseIds = new java.util.ArrayList[String]() + for (courseId <- allCourseIds.asScala) { + if (courseId.endsWith("_rc")) { + secureCourseIds.add(courseId) + } else { + courseIds.add(courseId) + } + } + val enrolmentList: java.util.List[java.util.Map[String, AnyRef]] = addCourseDetails(activeEnrolments, courseIds, request, false) + val secureCourseEnrolmentList: java.util.List[java.util.Map[String, AnyRef]] = addCourseDetails(activeEnrolments, secureCourseIds, request, true) + // Add secureCourseEnrolmentList to enrolmentList + enrolmentList.addAll(secureCourseEnrolmentList) + val updatedEnrolmentList = updateProgressData(enrolmentList, userId, allCourseIds, request.getRequestContext) addBatchDetails(updatedEnrolmentList, request) } else new java.util.ArrayList[java.util.Map[String, AnyRef]]() } diff --git a/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java b/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java index a0b645331..45a1e2215 100644 --- a/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java +++ b/course-mw/sunbird-util/sunbird-cassandra-utils/src/main/java/org/sunbird/cassandraimpl/CassandraOperationImpl.java @@ -454,10 +454,8 @@ public Response getRecordByIdentifier( }); } logger.debug(requestContext, selectWhere.getQueryString()); - logger.info(null,"cassandra query=="+ selectWhere.getQueryString()); ResultSet results = session.execute(selectWhere); response = CassandraUtil.createResponse(results); - logger.info(null,"Cassandra response "+response); } catch (Exception e) { logger.error(requestContext, Constants.EXCEPTION_MSG_FETCH + tableName + " : " + e.getMessage(), e); throw new ProjectCommonException( diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java index c9d7884f4..52686aaad 100644 --- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java +++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java @@ -1070,6 +1070,7 @@ public final class JsonKey { public static final String FIXED_BATCH_ID = "fixedBatchId"; public static final String COURSE_USER_ENROLMENTS_DB = "course_user_enrolments_db"; public static final String COURSE_BATCH_PATH = "sunbird_course_batch_path"; + public static final String SECURE_SETTINGS = "secureSettings"; private JsonKey() {} } From feeaf84e7d2a08250ca64fd4fb94dc2be3eb3b39 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Tue, 6 Jun 2023 17:09:07 +0530 Subject: [PATCH 10/17] Updated debug log --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 7fab7e6ab..04f42e18b 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -204,7 +204,7 @@ public static boolean getContentRead(String courseId, Request request) { try { String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; logger.info(null, "making call for content read ==" + courseId); - logger.info(null, "url "+baseContentreadUrl+" header "+headers); + logger.info(null, "url "+baseContentreadUrl+" request "+request); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); logger.info(null,"Content read response: " + Map.of("response", response)); if (response != null && !response.isEmpty()) { From 55df888f624eb40d7df130623d5b93caa1c3967c Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Tue, 6 Jun 2023 18:17:14 +0530 Subject: [PATCH 11/17] Using different approach for reading headers --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 5 ++--- .../scala/org/sunbird/enrolments/CourseEnrolmentActor.scala | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 04f42e18b..47acf4fe6 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -198,13 +198,12 @@ public static boolean updateCollection(RequestContext requestContext, String col return JsonKey.SUCCESS.equalsIgnoreCase(response); } - public static boolean getContentRead(String courseId, Request request) { - Map headers = (Map) request.get(JsonKey.HEADER); + public static boolean getContentRead(String courseId, Map headers) { boolean flag = false; try { String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; logger.info(null, "making call for content read ==" + courseId); - logger.info(null, "url "+baseContentreadUrl+" request "+request); + logger.info(null, "url "+baseContentreadUrl+" request "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); logger.info(null,"Content read response: " + Map.of("response", response)); if (response != null && !response.isEmpty()) { diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index ac87cab82..503bb7812 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -82,7 +82,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c val enrolmentData: UserCourses = userCoursesDao.read(request.getRequestContext, userId, courseId, batchId) validateEnrolment(batchData, enrolmentData, true) val data: java.util.Map[String, AnyRef] = createUserEnrolmentMap(userId, courseId, batchId, enrolmentData, request.getContext.getOrDefault(JsonKey.REQUEST_ID, "").asInstanceOf[String]) - val hasAccess = ContentUtil.getContentRead(courseId, request) + val hasAccess = ContentUtil.getContentRead(courseId, request.getContext.getOrDefault(JsonKey.HEADER, new util.HashMap[String, String]).asInstanceOf[util.Map[String, String]]) logger.info(null,"value of hasaccess "+hasAccess) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, (null == enrolmentData), request.getRequestContext) @@ -106,7 +106,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c getUpdatedStatus(enrolmentData) validateEnrolment(batchData, enrolmentData, false) val data: java.util.Map[String, AnyRef] = new java.util.HashMap[String, AnyRef]() {{ put(JsonKey.ACTIVE, ProjectUtil.ActiveStatus.INACTIVE.getValue.asInstanceOf[AnyRef]) }} - val hasAccess = ContentUtil.getContentRead(courseId, request) + val hasAccess = ContentUtil.getContentRead(courseId, request.getContext.getOrDefault(JsonKey.HEADER, new util.HashMap[String, String]).asInstanceOf[util.Map[String, String]]) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, false, request.getRequestContext) logger.info(request.getRequestContext, "CourseEnrolmentActor :: unEnroll :: Deleting redis for key " + getCacheKey(userId)) From cf3b24ea02be360d2c4a1222826cefe5814458d9 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Tue, 6 Jun 2023 18:45:19 +0530 Subject: [PATCH 12/17] Updated debug logs --- .../main/java/org/sunbird/learner/util/ContentUtil.java | 8 ++++++-- .../main/java/org/sunbird/common/models/util/JsonKey.java | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 47acf4fe6..8f7776dc9 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -198,12 +198,16 @@ public static boolean updateCollection(RequestContext requestContext, String col return JsonKey.SUCCESS.equalsIgnoreCase(response); } - public static boolean getContentRead(String courseId, Map headers) { + public static boolean getContentRead(String courseId, Map allHeaders) { boolean flag = false; try { + Map headers = new HashMap(); + if (allHeaders.containsKey(JsonKey.X_AUTH_USER_ORG_ID)) { + headers.put(JsonKey.X_AUTH_USER_ORG_ID, allHeaders.get(JsonKey.X_AUTHENTICATED_USER_TOKEN)); + } String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; logger.info(null, "making call for content read ==" + courseId); - logger.info(null, "url "+baseContentreadUrl+" request "+headers); + logger.info(null, "url "+baseContentreadUrl+" headers "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); logger.info(null,"Content read response: " + Map.of("response", response)); if (response != null && !response.isEmpty()) { diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java index 52686aaad..c75f05b34 100644 --- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java +++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/models/util/JsonKey.java @@ -1071,6 +1071,7 @@ public final class JsonKey { public static final String COURSE_USER_ENROLMENTS_DB = "course_user_enrolments_db"; public static final String COURSE_BATCH_PATH = "sunbird_course_batch_path"; public static final String SECURE_SETTINGS = "secureSettings"; + public static final String X_AUTH_USER_ORG_ID = "x-authenticated-user-orgid"; private JsonKey() {} } From 60a56398055a084e0d43ba198b4f2c7bc0eada61 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Wed, 7 Jun 2023 08:11:35 +0530 Subject: [PATCH 13/17] Fixed typo in variable name --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 8f7776dc9..9ce18551a 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -203,7 +203,7 @@ public static boolean getContentRead(String courseId, Map allHea try { Map headers = new HashMap(); if (allHeaders.containsKey(JsonKey.X_AUTH_USER_ORG_ID)) { - headers.put(JsonKey.X_AUTH_USER_ORG_ID, allHeaders.get(JsonKey.X_AUTHENTICATED_USER_TOKEN)); + headers.put(JsonKey.X_AUTH_USER_ORG_ID, allHeaders.get(JsonKey.X_AUTH_USER_ORG_ID)); } String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; logger.info(null, "making call for content read ==" + courseId); From ce4dce7fb2b7a299b0c80a140076946fa4338e00 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Wed, 7 Jun 2023 11:41:42 +0530 Subject: [PATCH 14/17] Fixes for internal content search --- .../scala/org/sunbird/enrolments/CourseEnrolmentActor.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index 503bb7812..a6398f39e 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -145,7 +145,7 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c def addCourseDetails(activeEnrolments: java.util.List[java.util.Map[String, AnyRef]], courseIds: java.util.List[String] , request:Request, flag:Boolean): java.util.List[java.util.Map[String, AnyRef]] = { val requestBody: String = prepareSearchRequest(courseIds, request, flag) - val searchResult:java.util.Map[String, AnyRef] = ContentSearchUtil.searchContentSync(request.getRequestContext, request.getContext.getOrDefault(JsonKey.URL_QUERY_STRING,"").asInstanceOf[String], requestBody, request.get(JsonKey.HEADER).asInstanceOf[java.util.Map[String, String]]) + val searchResult:java.util.Map[String, AnyRef] = ContentSearchUtil.searchContentSync(request.getRequestContext, request.getContext.getOrDefault(JsonKey.URL_QUERY_STRING,"").asInstanceOf[String], requestBody, request.getContext.getOrDefault(JsonKey.HEADER, new util.HashMap[String, String]).asInstanceOf[util.Map[String, String]]) val coursesList: java.util.List[java.util.Map[String, AnyRef]] = searchResult.getOrDefault(JsonKey.CONTENTS, new java.util.ArrayList[java.util.Map[String, AnyRef]]()).asInstanceOf[java.util.List[java.util.Map[String, AnyRef]]] val coursesMap = { if(CollectionUtils.isNotEmpty(coursesList)) { From a07cbe204827dcffa28387c2d03fd9419e150d91 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Wed, 7 Jun 2023 11:57:11 +0530 Subject: [PATCH 15/17] Added headers properly --- .../org/sunbird/learner/util/ContentSearchUtil.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentSearchUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentSearchUtil.java index 3e27ab238..7560f473f 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentSearchUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentSearchUtil.java @@ -39,9 +39,15 @@ public class ContentSearchUtil { contentSearchURL = baseUrl + searchPath; } - private static Map getUpdatedHeaders(Map headers) { - if (headers == null) { - headers = new HashMap<>(); + private static Map getUpdatedHeaders(Map allHeaders) { + Map headers = new HashMap(); + if (allHeaders != null) { + if (allHeaders.containsKey(JsonKey.X_AUTHENTICATED_USER_TOKEN)) { + headers.put(JsonKey.X_AUTHENTICATED_USER_TOKEN, allHeaders.get(JsonKey.X_AUTHENTICATED_USER_TOKEN)); + } + if (allHeaders.containsKey(JsonKey.X_AUTH_USER_ORG_ID)) { + headers.put(JsonKey.X_AUTH_USER_ORG_ID, allHeaders.get(JsonKey.X_AUTH_USER_ORG_ID)); + } } headers.put( HttpHeaders.AUTHORIZATION, JsonKey.BEARER + System.getenv(JsonKey.SUNBIRD_AUTHORIZATION)); From b396718d902409c9cbb9b1f8814a711351ccacc2 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Wed, 7 Jun 2023 12:21:17 +0530 Subject: [PATCH 16/17] Fixes for NPE --- .../org/sunbird/enrolments/CourseEnrolmentActor.scala | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index a6398f39e..9269db91d 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -337,11 +337,16 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c courseIds.add(courseId) } } + val allEnrolledCourses = new java.util.ArrayList[java.util.Map[String, AnyRef]] val enrolmentList: java.util.List[java.util.Map[String, AnyRef]] = addCourseDetails(activeEnrolments, courseIds, request, false) + if (enrolmentList != null) { + allEnrolledCourses.addAll(enrolmentList) + } val secureCourseEnrolmentList: java.util.List[java.util.Map[String, AnyRef]] = addCourseDetails(activeEnrolments, secureCourseIds, request, true) - // Add secureCourseEnrolmentList to enrolmentList - enrolmentList.addAll(secureCourseEnrolmentList) - val updatedEnrolmentList = updateProgressData(enrolmentList, userId, allCourseIds, request.getRequestContext) + if (secureCourseEnrolmentList != null) { + allEnrolledCourses.addAll(secureCourseEnrolmentList) + } + val updatedEnrolmentList = updateProgressData(allEnrolledCourses, userId, allCourseIds, request.getRequestContext) addBatchDetails(updatedEnrolmentList, request) } else new java.util.ArrayList[java.util.Map[String, AnyRef]]() } From b6b89b3fbf2dbbda58e278a6c14f3c868a7ae1f8 Mon Sep 17 00:00:00 2001 From: karthik-tarento Date: Wed, 7 Jun 2023 13:03:03 +0530 Subject: [PATCH 17/17] Removed unnecessary debug logs --- .../src/main/java/org/sunbird/learner/util/ContentUtil.java | 6 +----- .../scala/org/sunbird/enrolments/CourseEnrolmentActor.scala | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java index 9ce18551a..ced2f4f83 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/util/ContentUtil.java @@ -206,14 +206,10 @@ public static boolean getContentRead(String courseId, Map allHea headers.put(JsonKey.X_AUTH_USER_ORG_ID, allHeaders.get(JsonKey.X_AUTH_USER_ORG_ID)); } String baseContentreadUrl = ProjectUtil.getConfigValue(JsonKey.EKSTEP_BASE_URL) + "/content/v3/read/" + courseId; - logger.info(null, "making call for content read ==" + courseId); - logger.info(null, "url "+baseContentreadUrl+" headers "+headers); String response = HttpUtil.sendGetRequest(baseContentreadUrl, headers); - logger.info(null,"Content read response: " + Map.of("response", response)); if (response != null && !response.isEmpty()) { Map data = mapper.readValue(response, Map.class); - if (data.get("responseCode").equals("OK")) { - logger.info(null, "inside if condition checking response code " + data); + if (JsonKey.OK.equalsIgnoreCase((String) data.get(JsonKey.RESPONSE_CODE))) { flag = true; } } diff --git a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala index 9269db91d..bea3457cd 100644 --- a/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala +++ b/course-mw/enrolment-actor/src/main/scala/org/sunbird/enrolments/CourseEnrolmentActor.scala @@ -83,7 +83,6 @@ class CourseEnrolmentActor @Inject()(@Named("course-batch-notification-actor") c validateEnrolment(batchData, enrolmentData, true) val data: java.util.Map[String, AnyRef] = createUserEnrolmentMap(userId, courseId, batchId, enrolmentData, request.getContext.getOrDefault(JsonKey.REQUEST_ID, "").asInstanceOf[String]) val hasAccess = ContentUtil.getContentRead(courseId, request.getContext.getOrDefault(JsonKey.HEADER, new util.HashMap[String, String]).asInstanceOf[util.Map[String, String]]) - logger.info(null,"value of hasaccess "+hasAccess) if (hasAccess) { upsertEnrollment(userId, courseId, batchId, data, (null == enrolmentData), request.getRequestContext) logger.info(request.getRequestContext, "CourseEnrolmentActor :: enroll :: Deleting redis for key " + getCacheKey(userId))