diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java index 3139cf0226175a843c7e53dffd8eb5a1d79a4ef7..327d5a91f0aa9140ca6d553ba7c518f1f03e8529 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/certificate/service/CourseBatchCertificateActor.java @@ -18,14 +18,14 @@ import org.sunbird.common.models.util.TelemetryEnvKey; import org.sunbird.common.request.Request; import org.sunbird.common.request.RequestContext; import org.sunbird.common.responsecode.ResponseCode; +import org.sunbird.common.util.CloudStorageUtil; import org.sunbird.learner.actors.coursebatch.dao.CourseBatchDao; import org.sunbird.learner.actors.coursebatch.dao.impl.CourseBatchDaoImpl; import org.sunbird.learner.constants.CourseJsonKey; import org.sunbird.learner.util.CourseBatchUtil; import org.sunbird.learner.util.Util; -import static org.sunbird.common.models.util.JsonKey.CLOUD_STORE_BASE_PATH; -import static org.sunbird.common.models.util.JsonKey.CLOUD_STORE_BASE_PATH_PLACEHOLDER; +import static org.sunbird.common.models.util.JsonKey.*; import static org.sunbird.common.models.util.ProjectUtil.getConfigValue; public class CourseBatchCertificateActor extends BaseActor { @@ -123,6 +123,7 @@ public class CourseBatchCertificateActor extends BaseActor { if (MapUtils.isNotEmpty((Map<String,Object>)template.get(CourseJsonKey.NOTIFY_TEMPLATE))) { // We need to change stateImgUrl in notifyTemplate Map<String, Object> notifyData = (Map<String, Object>) template.get(CourseJsonKey.NOTIFY_TEMPLATE); + //TODO cross check the data in environments and remove this check if not required String notifyTemplateUrl = getPlaceholderUrl(notifyData,JsonKey.stateImgUrl); notifyData.replace(JsonKey.stateImgUrl,notifyTemplateUrl); template.put( @@ -146,8 +147,8 @@ public class CourseBatchCertificateActor extends BaseActor { if (MapUtils.isNotEmpty(templateDetails) && templateDetails.containsKey(key)) { // replace the actual cloud url with the template value templateUrl = (String) templateDetails.get(key); - if (templateUrl.contains(getConfigValue(CLOUD_STORE_BASE_PATH))) - templateUrl = templateUrl.replace(getConfigValue(CLOUD_STORE_BASE_PATH), getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER)); + if (templateUrl.contains(CloudStorageUtil.getBaseUrl() +"/"+getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER))) + templateUrl = templateUrl.replace(CloudStorageUtil.getBaseUrl()+"/"+getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER), getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER)); } return templateUrl; } @@ -196,7 +197,7 @@ public class CourseBatchCertificateActor extends BaseActor { String notifyTemplateData = (String) template.get(CourseJsonKey.NOTIFY_TEMPLATE); //Modify the placeholder with the actual configured cloud base path as ES should have the actual cloud path if (notifyTemplateData.contains(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER))) - notifyTemplateData = notifyTemplateData.replace(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER), getConfigValue(CLOUD_STORE_BASE_PATH)); + notifyTemplateData = notifyTemplateData.replace(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER), CloudStorageUtil.getBaseUrl()+"/"+getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER)); template.put( CourseJsonKey.NOTIFY_TEMPLATE, mapper.readValue(notifyTemplateData, diff --git a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java index 8d21258cff26bf2f09cca5d9b976092282a9fba0..026c753f4b8036ab89afd13b666e61b8c7cab309 100644 --- a/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java +++ b/course-mw/course-actors-common/src/main/java/org/sunbird/learner/actors/qrcodedownload/QRCodeDownloadManagementActor.java @@ -232,11 +232,10 @@ public class QRCodeDownloadManagementActor extends BaseActor { if (null != obj && obj instanceof List) { List<Map<String, Object>> listOfMap = (List<Map<String, Object>>) obj; if (CollectionUtils.isNotEmpty(listOfMap)) { - //TODO Resolve it and store. Assuming dial code db will have the template url with data migration script + //check if template url contains dail storage base path placeholder,if yes then append it with cname url and dial bucket name String templateUrl = (String) listOfMap.get(0).get("url"); - //replace template url with the actual cloud url - if (templateUrl.contains(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER))) - templateUrl = templateUrl.replace(getConfigValue(CLOUD_STORE_BASE_PATH_PLACEHOLDER), getConfigValue(CLOUD_STORE_BASE_PATH)); + String dailStorageBasePathPlaceHolder = getConfigValue(DIAL_STORAGE_BASE_PATH_PLACEHOLDER); + templateUrl = resolvePlaceholder(templateUrl, dailStorageBasePathPlaceHolder,getConfigValue(CLOUD_STORAGE_DIAL_BUCKET_NAME)); return templateUrl; } } @@ -244,6 +243,14 @@ public class QRCodeDownloadManagementActor extends BaseActor { return ""; } + private String resolvePlaceholder(String templateUrl, String placeHolder,String containerName) { + if (templateUrl.contains(placeHolder)) + templateUrl = templateUrl.replace(placeHolder, CloudStorageUtil.getBaseUrl() + + "/" + containerName); + return templateUrl; + } + + /** * Uploading the generated csv to aws * 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 61c8186bbfab486c07e741e8e5a55a7b3244e659..b4a0fd0c239477253dcb6daa8529fdf0b197a1a5 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 @@ -789,6 +789,9 @@ public final class JsonKey { public static final String CLOUD_FOLDER_CONTENT = "sunbird_cloud_content_folder"; public static final String CLOUD_STORE_BASE_PATH = "cloud_storage_base_url"; + public static final String CLOUD_STORAGE_CNAME_URL= "cloud_storage_cname_url"; + public static final String CLOUD_STORAGE_DIAL_BUCKET_NAME = "cloud_storage_dial_bucketname"; + public static final String DIAL_STORAGE_BASE_PATH_PLACEHOLDER="cloud_storage_path_prefix_dial"; public static final String CLOUD_STORE_BASE_PATH_PLACEHOLDER = "cloud_store_base_path_placeholder"; public static final String TO_URL = "toUrl"; public static final String TTL = "ttl"; diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java index 288930091450d01cc9464f0cabec122a356e39fa..adf7fd5aeb57a2f35098e8a01d96e81730a3290a 100644 --- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java +++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/java/org/sunbird/common/util/CloudStorageUtil.java @@ -2,6 +2,8 @@ package org.sunbird.common.util; import java.util.HashMap; import java.util.Map; + +import org.apache.commons.lang.StringUtils; import org.sunbird.cloud.storage.BaseStorageService; import org.sunbird.cloud.storage.factory.StorageConfig; import org.sunbird.cloud.storage.factory.StorageServiceFactory; @@ -11,6 +13,10 @@ import org.sunbird.common.models.util.PropertiesCache; import scala.Option; import scala.Some; +import static org.sunbird.common.models.util.JsonKey.CLOUD_STORAGE_CNAME_URL; +import static org.sunbird.common.models.util.JsonKey.CLOUD_STORE_BASE_PATH; +import static org.sunbird.common.models.util.ProjectUtil.getConfigValue; + public class CloudStorageUtil { private static final int STORAGE_SERVICE_API_RETRY_COUNT = 3; @@ -76,4 +82,11 @@ public class CloudStorageUtil { BaseStorageService storageService = getStorageService(storageType); return storageService.getUri(container, prefix, Option.apply(isDirectory)); } + + public static String getBaseUrl() { + String baseUrl = getConfigValue(CLOUD_STORAGE_CNAME_URL); + if(StringUtils.isEmpty(baseUrl)) + baseUrl = getConfigValue(CLOUD_STORE_BASE_PATH); + return baseUrl; + } } diff --git a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties index 08ac8c42afca182272a046bc5109dbabd48d0d7a..0cc89165bc8f4172cfcf09882cb041b06280e196 100644 --- a/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties +++ b/course-mw/sunbird-util/sunbird-platform-core/common-util/src/main/resources/externalresource.properties @@ -80,7 +80,7 @@ sunbird_otp_allowed_attempt=2 #Telemetry producer related info telemetry_pdata_id=local.sunbird.learning.service telemetry_pdata_pid=learning-service -telemetry_pdata_ver=5.0.0 +telemetry_pdata_ver=5.0.1 #elastic search top n result count for telemetry searchTopN=5 telemetry_queue_threshold_value=200 @@ -207,4 +207,6 @@ sunbird_msg_91_auth= sunbird_api_mgr_base_url=https://dev.sunbirded.org/api enrollment_list_size=1000 cloud_storage_base_url=https://sunbirddev.blob.core.windows.net -cloud_store_base_path_placeholder=$CLOUD_STORE_BASE_PATH \ No newline at end of file +cloud_store_base_path_placeholder=CLOUD_BASE_PATH +cloud_storage_dial_bucketname=dial +cloud_storage_path_prefix_dial=DIAL_STORAGE_BASE_PATH \ No newline at end of file diff --git a/service/app/filters/ResponseFilter.scala b/service/app/filters/ResponseFilter.scala index afcf461357f17c3763965c6ffbef994a440079f9..e3100bd7a27d5bebe7e0f4e0c33e4eb6233f942c 100644 --- a/service/app/filters/ResponseFilter.scala +++ b/service/app/filters/ResponseFilter.scala @@ -2,7 +2,9 @@ package filters import akka.stream.Materializer import akka.util.ByteString +import org.apache.commons.lang.StringUtils import org.sunbird.common.models.util.JsonKey +import org.sunbird.common.models.util.JsonKey.{CLOUD_STORAGE_CNAME_URL, CLOUD_STORE_BASE_PATH, CONTENT_CLOUD_STORAGE_CONTAINER} import play.api.http.HttpEntity.Strict import play.api.mvc.{Filter, RequestHeader, Result} import org.sunbird.common.models.util.ProjectUtil.getConfigValue @@ -18,7 +20,7 @@ class ResponseFilter @Inject()(implicit val mat: Materializer, ec: ExecutionCon if (null != result.body && !result.body.isKnownEmpty){ val contentType = result.body.contentType val updatedBody = result.body.consumeData.map { x => - val y = x.utf8String.replaceAll(getConfigValue(JsonKey.CLOUD_STORE_BASE_PATH_PLACEHOLDER),getConfigValue(JsonKey.CLOUD_STORE_BASE_PATH)) + val y = x.utf8String.replaceAll(getConfigValue(JsonKey.CLOUD_STORE_BASE_PATH_PLACEHOLDER), getBaseUrl + "/" + getConfigValue(CONTENT_CLOUD_STORAGE_CONTAINER)) logger.info("updated body: " + y) y } @@ -29,4 +31,10 @@ class ResponseFilter @Inject()(implicit val mat: Materializer, ec: ExecutionCon Future(result) } } + + def getBaseUrl: String = { + var baseUrl = getConfigValue(CLOUD_STORAGE_CNAME_URL) + if (StringUtils.isEmpty(baseUrl)) baseUrl = getConfigValue(CLOUD_STORE_BASE_PATH) + baseUrl + } } \ No newline at end of file