diff --git a/plugins/src/main/java/com/google/fhir/gateway/plugin/OpenSRPSyncAccessDecision.java b/plugins/src/main/java/com/google/fhir/gateway/plugin/OpenSRPSyncAccessDecision.java index ee6ea2c0..4a5e868f 100755 --- a/plugins/src/main/java/com/google/fhir/gateway/plugin/OpenSRPSyncAccessDecision.java +++ b/plugins/src/main/java/com/google/fhir/gateway/plugin/OpenSRPSyncAccessDecision.java @@ -62,7 +62,7 @@ public class OpenSRPSyncAccessDecision implements AccessDecision { public static final String MATCHES_ANY_VALUE = "ANY_VALUE"; private static final Logger logger = LoggerFactory.getLogger(OpenSRPSyncAccessDecision.class); private static final int LENGTH_OF_SEARCH_PARAM_AND_EQUALS = 5; - private final List syncStrategy; + private final String syncStrategy; private final String applicationId; private final boolean accessGranted; @@ -83,7 +83,7 @@ public OpenSRPSyncAccessDecision( List locationIds, List careTeamIds, List organizationIds, - List syncStrategy) { + String syncStrategy) { this.applicationId = applicationId; this.accessGranted = accessGranted; this.careTeamIds = careTeamIds; diff --git a/plugins/src/main/java/com/google/fhir/gateway/plugin/PermissionAccessChecker.java b/plugins/src/main/java/com/google/fhir/gateway/plugin/PermissionAccessChecker.java index 435bc8da..7b5144d8 100755 --- a/plugins/src/main/java/com/google/fhir/gateway/plugin/PermissionAccessChecker.java +++ b/plugins/src/main/java/com/google/fhir/gateway/plugin/PermissionAccessChecker.java @@ -16,8 +16,6 @@ package com.google.fhir.gateway.plugin; import static com.google.fhir.gateway.ProxyConstants.SYNC_STRATEGY; -import static org.smartregister.utils.Constants.LOCATION; -import static org.smartregister.utils.Constants.ORGANIZATION; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.model.api.IQueryParameterType; @@ -33,11 +31,11 @@ import com.google.fhir.gateway.interfaces.*; import com.google.gson.Gson; import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import java.util.*; import java.util.stream.Collectors; import javax.inject.Named; +import org.apache.commons.lang3.StringUtils; import org.hl7.fhir.r4.model.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,7 +54,7 @@ public class PermissionAccessChecker implements AccessChecker { private final List organizationIds; - private final List syncStrategy; + private final String syncStrategy; private PermissionAccessChecker( List userRoles, @@ -65,7 +63,7 @@ private PermissionAccessChecker( List careTeamIds, List locationIds, List organizationIds, - List syncStrategy) { + String syncStrategy) { Preconditions.checkNotNull(userRoles); Preconditions.checkNotNull(resourceFinder); Preconditions.checkNotNull(applicationId); @@ -257,21 +255,18 @@ private Binary findApplicationConfigBinaryResource(String binaryResourceId) { return binary; } - private List findSyncStrategy(Binary binary) { + private String findSyncStrategy(Binary binary) { byte[] bytes = binary != null && binary.getDataElement() != null ? Base64.getDecoder().decode(binary.getDataElement().getValueAsString()) : null; - List syncStrategy = new ArrayList<>(); + String syncStrategy = Constants.EMPTY_STRING; if (bytes != null) { String json = new String(bytes); JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class); JsonArray jsonArray = jsonObject.getAsJsonArray(SYNC_STRATEGY); - if (jsonArray != null) { - for (JsonElement jsonElement : jsonArray) { - syncStrategy.add(jsonElement.getAsString()); - } - } + if (jsonArray != null && !jsonArray.isEmpty()) + syncStrategy = jsonArray.get(0).getAsString(); } return syncStrategy; } @@ -322,7 +317,7 @@ public AccessChecker create( Composition composition = readCompositionResource(applicationId); String binaryResourceReference = getBinaryResourceReference(composition); Binary binary = findApplicationConfigBinaryResource(binaryResourceReference); - List syncStrategy = findSyncStrategy(binary); + String syncStrategy = findSyncStrategy(binary); PractitionerDetails practitionerDetails = readPractitionerDetails(jwt.getSubject()); List careTeams; List organizations; @@ -330,8 +325,8 @@ public AccessChecker create( List careTeamIds = new ArrayList<>(); List organizationIds = new ArrayList<>(); List locationIds = new ArrayList<>(); - if (syncStrategy.size() > 0) { - if (syncStrategy.contains(Constants.CARE_TEAM)) { + if (StringUtils.isNotBlank(syncStrategy)) { + if (syncStrategy.equals(Constants.CARE_TEAM)) { careTeams = practitionerDetails != null && practitionerDetails.getFhirPractitionerDetails() != null @@ -342,7 +337,7 @@ public AccessChecker create( careTeamIds.add(careTeam.getIdElement().getIdPart()); } } - } else if (syncStrategy.contains(ORGANIZATION)) { + } else if (syncStrategy.equals(Constants.ORGANIZATION)) { organizations = practitionerDetails != null && practitionerDetails.getFhirPractitionerDetails() != null @@ -353,7 +348,7 @@ public AccessChecker create( organizationIds.add(organization.getIdElement().getIdPart()); } } - } else if (syncStrategy.contains(LOCATION)) { + } else if (syncStrategy.equals(Constants.LOCATION)) { locations = practitionerDetails != null && practitionerDetails.getFhirPractitionerDetails() != null