diff --git a/exec/pom.xml b/exec/pom.xml index 0873fb0..2b38ba0 100755 --- a/exec/pom.xml +++ b/exec/pom.xml @@ -4,7 +4,7 @@ org.smartregister opensrp-gateway-plugin - 2.0.7 + 2.0.8-alpha exec @@ -70,7 +70,7 @@ org.smartregister plugins - 2.0.7 + 2.0.8-alpha diff --git a/plugins/pom.xml b/plugins/pom.xml index b32008a..99734d2 100644 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -4,7 +4,7 @@ org.smartregister opensrp-gateway-plugin - 2.0.7 + 2.0.8-alpha plugins diff --git a/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/PermissionAccessChecker.java b/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/PermissionAccessChecker.java index 3fc6241..870452b 100755 --- a/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/PermissionAccessChecker.java +++ b/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/PermissionAccessChecker.java @@ -12,7 +12,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; -import org.hl7.fhir.r4.model.Binary; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.CareTeam; import org.hl7.fhir.r4.model.Composition; @@ -22,6 +21,7 @@ import org.slf4j.LoggerFactory; import org.smartregister.fhir.gateway.plugins.interfaces.ResourceFinder; import org.smartregister.model.practitioner.PractitionerDetails; +import org.springframework.web.client.RestTemplate; import com.auth0.jwt.interfaces.DecodedJWT; import com.google.common.annotations.VisibleForTesting; @@ -49,6 +49,7 @@ public class PermissionAccessChecker implements AccessChecker { private final String applicationId; private final FhirContext fhirContext; private final DecodedJWT jwt; + private final RestTemplate restTemplate = new RestTemplateUtil().getRestTemplate(); private PermissionAccessChecker( FhirContext fhirContext, @@ -249,10 +250,18 @@ Pair fetchSyncStrategyDetails( PractitionerDetails practitionerDetails = compositionPractitionerDetailsPair.getRight(); String binaryResourceReference = Utils.getBinaryResourceReference(composition); - Binary binary = - Utils.readApplicationConfigBinaryResource(binaryResourceReference, fhirContext); + String response = fetchBinary(binaryResourceReference); - return Pair.of(Utils.findSyncStrategy(binary), practitionerDetails); + // Binary binary = Utils.readApplicationConfigBinaryResource(binaryResourceReference, + // fhirContext); + + return Pair.of(Utils.findSyncStrategy(response), practitionerDetails); + } + + private String fetchBinary(String binaryResourceIdentifier) { + final String requestURL = + System.getenv(Constants.PROXY_TO_ENV) + '/' + binaryResourceIdentifier; + return restTemplate.getForObject(requestURL, String.class); } private Map> getSyncStrategyIds( diff --git a/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/RestTemplateUtil.java b/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/RestTemplateUtil.java new file mode 100644 index 0000000..46db2ac --- /dev/null +++ b/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/RestTemplateUtil.java @@ -0,0 +1,20 @@ +package org.smartregister.fhir.gateway.plugins; + +import org.springframework.web.client.RestTemplate; + +public class RestTemplateUtil { + private volatile RestTemplate restTemplate; + + public RestTemplate getRestTemplate() { + RestTemplate localReferenceRestTemplate = restTemplate; + if (localReferenceRestTemplate == null) { + synchronized (this) { + localReferenceRestTemplate = restTemplate; + if (localReferenceRestTemplate == null) { + restTemplate = localReferenceRestTemplate = new RestTemplate(); + } + } + } + return localReferenceRestTemplate; + } +} diff --git a/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/Utils.java b/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/Utils.java index 495eb24..971d7c6 100644 --- a/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/Utils.java +++ b/plugins/src/main/java/org/smartregister/fhir/gateway/plugins/Utils.java @@ -1,5 +1,6 @@ package org.smartregister.fhir.gateway.plugins; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Base64; import java.util.Collections; @@ -168,20 +169,25 @@ public static Binary readApplicationConfigBinaryResource( } public static String findSyncStrategy(Binary binary) { - byte[] bytes = binary != null && binary.getDataElement() != null ? Base64.getDecoder().decode(binary.getDataElement().getValueAsString()) : null; + return findSyncStrategy(bytes); + } + + public static String findSyncStrategy(String binaryData) { + byte[] bytes = binaryData.getBytes(StandardCharsets.UTF_8); + return findSyncStrategy(bytes); + } + + public static String findSyncStrategy(byte[] binaryDataBytes) { String syncStrategy = org.smartregister.utils.Constants.EMPTY_STRING; - if (bytes != null) { - String json = new String(bytes); - JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class); - JsonArray jsonArray = - jsonObject.getAsJsonArray(Constants.AppConfigJsonKey.SYNC_STRATEGY); - if (jsonArray != null && !jsonArray.isEmpty()) - syncStrategy = jsonArray.get(0).getAsString(); - } + String json = new String(binaryDataBytes); + JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class); + JsonArray jsonArray = jsonObject.getAsJsonArray(Constants.AppConfigJsonKey.SYNC_STRATEGY); + if (jsonArray != null && !jsonArray.isEmpty()) + syncStrategy = jsonArray.get(0).getAsString(); return syncStrategy; } diff --git a/pom.xml b/pom.xml index eb1786f..d8e2ddd 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ org.smartregister opensrp-gateway-plugin - 2.0.7 + 2.0.8-alpha pom