From b78f364db5f94fbfa223b587b055c031b1254d34 Mon Sep 17 00:00:00 2001 From: ravishanigarapu <133210792+ravishanigarapu@users.noreply.github.com> Date: Tue, 15 Apr 2025 12:19:33 +0530 Subject: [PATCH 01/13] Update application.properties --- src/main/resources/application.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3161561d..2df80d90 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,6 +20,7 @@ spring.jpa.hibernate.ddl-auto=none spring.jpa.hibernate.show_sql=true spring.jpa.hibernate.format_sql=true spring.main.allow-circular-references=true +spring.main.allow-bean-definition-overriding=true spring.session.store-type=redis #spring.redis.host=localhost spring.redis.password= From e96e479b1d08817b26680e281fd5893e9fd96aff Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 17 Apr 2025 15:22:43 +0530 Subject: [PATCH 02/13] Swagger changes --- src/main/environment/common_ci.properties | 4 ++++ src/main/environment/common_dev.properties | 3 ++- src/main/environment/common_example.properties | 3 ++- src/main/environment/common_prod.properties | 3 ++- src/main/environment/common_test.properties | 3 +++ src/main/environment/common_uat.properties | 3 +++ .../java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java | 3 +++ 7 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 0b523e61..eaf0757b 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -92,3 +92,7 @@ jwt.secret=@env.JWT_SECRET_KEY@ #ELK logging file name logging.file.name=@env.HWC_API_LOGGING_FILE_NAME@ +springdoc.api-docs.enabled=@env.SWAGGER_DOC_ENABLED@ +springdoc.swagger-ui.enabled=@env.SWAGGER_DOC_ENABLED@ + + diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index f3a77e6a..e199a24c 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -88,5 +88,6 @@ prescription=TMPrescription SMS spring.redis.host=localhost jwt.secret= - +springdoc.api-docs.enabled=true +springdoc.swagger-ui.enabled=true diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index 05474859..89452623 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -92,6 +92,7 @@ jwt.secret= spring.redis.port=6379 - +springdoc.api-docs.enabled=true +springdoc.swagger-ui.enabled=true diff --git a/src/main/environment/common_prod.properties b/src/main/environment/common_prod.properties index f07dbad6..7cfd09e5 100644 --- a/src/main/environment/common_prod.properties +++ b/src/main/environment/common_prod.properties @@ -90,5 +90,6 @@ prescription=TMPrescription SMS spring.redis.host=localhost jwt.secret= - +springdoc.api-docs.enabled=false +springdoc.swagger-ui.enabled=false diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index 21efeaff..0d1495bf 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -92,5 +92,8 @@ prescription=TMPrescription SMS spring.redis.host=localhost jwt.secret= +springdoc.api-docs.enabled=true +springdoc.swagger-ui.enabled=true + diff --git a/src/main/environment/common_uat.properties b/src/main/environment/common_uat.properties index e20bfc38..d8ceb7ee 100644 --- a/src/main/environment/common_uat.properties +++ b/src/main/environment/common_uat.properties @@ -92,5 +92,8 @@ prescription=TMPrescription SMS spring.redis.host=localhost jwt.secret= +springdoc.api-docs.enabled=true +springdoc.swagger-ui.enabled=true + diff --git a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java index d51ff7db..dcb16f4b 100644 --- a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java @@ -55,6 +55,9 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo // Skip login and public endpoints if (path.equals(contextPath + "/user/userAuthenticate") || path.equalsIgnoreCase(contextPath + "/user/logOutUserFromConcurrentSession") + || path.startsWith(contextPath + "/swagger-ui") + || path.startsWith(contextPath + "/v3/api-docs") + || path.startsWith(contextPath + "/user/refreshToken") || path.startsWith(contextPath + "/public")) { logger.info("Skipping filter for path: " + path); filterChain.doFilter(servletRequest, servletResponse); From 025784b0bb9071f8ede1d47a3f97d8d4f9394fd6 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Tue, 20 May 2025 14:51:03 +0530 Subject: [PATCH 03/13] AMM-1456 : Skiped jwtToken validation if not present in Cookie or header from mobile request. --- .../hwc/utils/JwtUserIdValidationFilter.java | 53 ++++++++++++------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java index dcb16f4b..d4ab409a 100644 --- a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java @@ -55,42 +55,57 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo // Skip login and public endpoints if (path.equals(contextPath + "/user/userAuthenticate") || path.equalsIgnoreCase(contextPath + "/user/logOutUserFromConcurrentSession") - || path.startsWith(contextPath + "/swagger-ui") - || path.startsWith(contextPath + "/v3/api-docs") - || path.startsWith(contextPath + "/user/refreshToken") - || path.startsWith(contextPath + "/public")) { + || path.startsWith(contextPath + "/swagger-ui") || path.startsWith(contextPath + "/v3/api-docs") + || path.startsWith(contextPath + "/user/refreshToken") || path.startsWith(contextPath + "/public")) { logger.info("Skipping filter for path: " + path); filterChain.doFilter(servletRequest, servletResponse); return; } try { - // Retrieve JWT token from cookies - String jwtTokenFromCookie = getJwtTokenFromCookies(request); - logger.info("JWT token from cookie: "); - - // Determine which token (cookie or header) to validate - String jwtToken = jwtTokenFromCookie != null ? jwtTokenFromCookie : jwtTokenFromHeader; - if (jwtToken == null) { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "JWT token not found in cookies or headers"); - return; + String jwtFromCookie = getJwtTokenFromCookies(request); + String jwtFromHeader = request.getHeader("JwtToken"); + String authHeader = request.getHeader("Authorization"); + + if (jwtFromCookie != null) { + logger.info("Validating JWT token from cookie"); + if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromCookie)) { + filterChain.doFilter(servletRequest, servletResponse); + return; + } } - // Validate JWT token and userId - boolean isValid = jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtToken); + if (jwtFromHeader != null) { + logger.info("Validating JWT token from header"); + if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromHeader)) { + filterChain.doFilter(servletRequest, servletResponse); + return; + } + } + String userAgent = request.getHeader("User-Agent"); + logger.info("User-Agent: " + userAgent); - if (isValid) { - // If token is valid, allow the request to proceed + if (userAgent != null && isMobileClient(userAgent) && authHeader != null) { filterChain.doFilter(servletRequest, servletResponse); - } else { - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Invalid JWT token"); + return; } + + logger.warn("No valid authentication token found"); + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized: Invalid or missing token"); + } catch (Exception e) { logger.error("Authorization error: ", e); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: " + e.getMessage()); } } + private boolean isMobileClient(String userAgent) { + if (userAgent == null) + return false; + userAgent = userAgent.toLowerCase(); + return userAgent.contains("okhttp"); // iOS (custom clients) + } + private String getJwtTokenFromCookies(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if (cookies != null) { From 4f3c0f30e83d2946e9ce4139b877288e052b6030 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 22 May 2025 17:01:54 +0530 Subject: [PATCH 04/13] Jwtten and user-agent validation --- .../immunization/ImmunizationServiceImpl.java | 11 ++--- .../CSCarestreamServiceImpl.java | 12 +---- .../service/choApp/CHOAppSyncServiceImpl.java | 8 ++-- .../RegistrarServiceMasterDataImpl.java | 7 +-- .../transaction/CommonDoctorServiceImpl.java | 10 +---- .../common/transaction/CommonServiceImpl.java | 11 ++--- .../DownloadDataFromServerImpl.java | 7 +-- .../UploadDataToServerImpl.java | 6 +-- .../registrar/RegistrarServiceImpl.java | 45 +++---------------- .../SMSGatewayServiceImpl.java | 17 +++---- .../TeleConsultationServiceImpl.java | 10 +---- .../java/com/iemr/hwc/utils/CookieUtil.java | 14 ++++-- .../com/iemr/hwc/utils/RestTemplateUtil.java | 44 ++++++++++++++++++ .../com/iemr/hwc/utils/UserAgentContext.java | 19 ++++++++ .../AuthorizationHeaderRequestWrapper.java | 42 +++++++++++++++++ .../utils/http/HTTPRequestInterceptor.java | 4 ++ 16 files changed, 153 insertions(+), 114 deletions(-) create mode 100644 src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java create mode 100644 src/main/java/com/iemr/hwc/utils/UserAgentContext.java create mode 100644 src/main/java/com/iemr/hwc/utils/http/AuthorizationHeaderRequestWrapper.java diff --git a/src/main/java/com/iemr/hwc/fhir/service/immunization/ImmunizationServiceImpl.java b/src/main/java/com/iemr/hwc/fhir/service/immunization/ImmunizationServiceImpl.java index 968df0e8..5b81654d 100644 --- a/src/main/java/com/iemr/hwc/fhir/service/immunization/ImmunizationServiceImpl.java +++ b/src/main/java/com/iemr/hwc/fhir/service/immunization/ImmunizationServiceImpl.java @@ -10,6 +10,7 @@ import com.iemr.hwc.fhir.utils.mapper.MapperUtils; import com.iemr.hwc.fhir.utils.validation.ImmunizationValidation; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import org.mapstruct.factory.Mappers; import org.slf4j.Logger; @@ -60,14 +61,8 @@ public ImmunizationExt addOrUpdateImmunization(HttpServletRequest theRequest, Im String covidVaccineStatus = new GsonBuilder().serializeNulls().create().toJson(covidVaccineStatusDTO); RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); - headers.add("AUTHORIZATION", theRequest.getHeader("Authorization")); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(covidVaccineStatus, headers); + + HttpEntity request = RestTemplateUtil.createRequestEntity(covidVaccineStatus, theRequest.getHeader("Authorization")); ResponseEntity response = restTemplate.exchange(saveCovidVaccineDetailsURL, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/service/cancerScreening/CSCarestreamServiceImpl.java b/src/main/java/com/iemr/hwc/service/cancerScreening/CSCarestreamServiceImpl.java index aad7d3b1..1259f655 100644 --- a/src/main/java/com/iemr/hwc/service/cancerScreening/CSCarestreamServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/cancerScreening/CSCarestreamServiceImpl.java @@ -44,6 +44,7 @@ import com.google.gson.Gson; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import jakarta.servlet.http.HttpServletRequest; @@ -62,18 +63,9 @@ public int createMamographyRequest(ArrayList benDataForCareStream, lon String Authorization) { int responseData = 0; RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); try { - // HttpHeaders headers = new HttpHeaders(); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); String requestOBJ = getOrderCreationRequestOBJ(benDataForCareStream, benRegID, benVisitID); - - HttpEntity request = new HttpEntity(requestOBJ, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization); // System.out.println("hello"); ResponseEntity response = restTemplate.exchange(carestreamOrderCreateURL, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index caccea62..27b6219d 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -39,6 +39,7 @@ import com.iemr.hwc.service.benFlowStatus.CommonBenStatusFlowServiceImpl; import com.iemr.hwc.service.common.transaction.CommonNurseServiceImpl; import com.iemr.hwc.service.generalOPD.GeneralOPDServiceImpl; +import com.iemr.hwc.utils.RestTemplateUtil; import com.iemr.hwc.utils.exception.IEMRException; import com.iemr.hwc.utils.request.SyncSearchRequest; import com.iemr.hwc.utils.response.OutputResponse; @@ -171,8 +172,7 @@ public ResponseEntity registerCHOAPPBeneficiary(String comingRequest, St MultiValueMap headers = new LinkedMultiValueMap(); headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); headers.add("AUTHORIZATION", Authorization); - - HttpEntity registrationRequest = new HttpEntity(comingRequest, headers); + HttpEntity registrationRequest = RestTemplateUtil.createRequestEntity(comingRequest, Authorization); try { ResponseEntity registrationResponse = restTemplate.exchange(registrationUrl, HttpMethod.POST, registrationRequest, @@ -253,7 +253,7 @@ public ResponseEntity getBeneficiaryByVillageIDAndLastModifiedDate(SyncS villageIDAndLastSyncDate.setLastModifiedDate(dt.toDate().getTime()); String identityRequestString = new GsonBuilder().create().toJson(villageIDAndLastSyncDate); - HttpEntity request = new HttpEntity<>(identityRequestString, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(identityRequestString, Authorization); ResponseEntity response = restTemplate.exchange(syncSearchByLocation, HttpMethod.POST, request, String.class); @@ -316,7 +316,7 @@ public ResponseEntity countBeneficiaryByVillageIDAndLastModifiedDate(Syn villageIDAndLastSyncDate.setLastModifiedDate(dt.toDate().getTime()); String identityRequestString = new GsonBuilder().create().toJson(villageIDAndLastSyncDate); - HttpEntity request = new HttpEntity<>(identityRequestString, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(identityRequestString, Authorization); ResponseEntity response = restTemplate.exchange(getBenCountToSync, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/service/common/master/RegistrarServiceMasterDataImpl.java b/src/main/java/com/iemr/hwc/service/common/master/RegistrarServiceMasterDataImpl.java index 197be85c..07dfb638 100644 --- a/src/main/java/com/iemr/hwc/service/common/master/RegistrarServiceMasterDataImpl.java +++ b/src/main/java/com/iemr/hwc/service/common/master/RegistrarServiceMasterDataImpl.java @@ -73,6 +73,7 @@ import com.iemr.hwc.repo.nurse.anc.ANCCareRepo; import com.iemr.hwc.repo.registrar.BeneficiaryImageRepo; import com.iemr.hwc.repo.registrar.ReistrarRepoBenSearch; +import com.iemr.hwc.utils.RestTemplateUtil; @Service @PropertySource("classpath:application.properties") @@ -273,11 +274,7 @@ public String getBenImageFromIdentityAPI(String Authorization, String comingRequ String returnOBJ = null; String tempResponse = null; RestTemplate restTemplate = new RestTemplate(); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - //String encodedRequest = URLEncoder.encode(comingRequest, "UTF-8"); - HttpEntity request = new HttpEntity(comingRequest, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(comingRequest, Authorization); ResponseEntity response = restTemplate.exchange(getBenImageFromIdentity, HttpMethod.POST, request, String.class); returnOBJ = response.getBody(); diff --git a/src/main/java/com/iemr/hwc/service/common/transaction/CommonDoctorServiceImpl.java b/src/main/java/com/iemr/hwc/service/common/transaction/CommonDoctorServiceImpl.java index ac625fea..2293c14f 100644 --- a/src/main/java/com/iemr/hwc/service/common/transaction/CommonDoctorServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/common/transaction/CommonDoctorServiceImpl.java @@ -81,6 +81,7 @@ import com.iemr.hwc.service.snomedct.SnomedServiceImpl; import com.iemr.hwc.service.tele_consultation.SMSGatewayServiceImpl; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import com.iemr.hwc.utils.exception.IEMRException; import com.iemr.hwc.utils.mapper.InputMapper; import com.iemr.hwc.utils.mapper.OutputMapper; @@ -975,14 +976,7 @@ public int callTmForSpecialistSlotBook(TcSpecialistSlotBookingRequestOBJ tcSpeci String requestOBJ = OutputMapper.gson().toJson(tcSpecialistSlotBookingRequestOBJ); RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(requestOBJ, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization); ResponseEntity response = restTemplate.exchange(tcSpecialistSlotBook, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/service/common/transaction/CommonServiceImpl.java b/src/main/java/com/iemr/hwc/service/common/transaction/CommonServiceImpl.java index 2cac7499..93847ab4 100644 --- a/src/main/java/com/iemr/hwc/service/common/transaction/CommonServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/common/transaction/CommonServiceImpl.java @@ -68,6 +68,7 @@ import com.iemr.hwc.service.quickConsultation.QuickConsultationServiceImpl; import com.iemr.hwc.service.tele_consultation.TeleConsultationServiceImpl; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import com.iemr.hwc.utils.exception.IEMRException; import com.iemr.hwc.utils.mapper.InputMapper; @@ -635,9 +636,7 @@ public TeleconsultationRequestOBJ createTcRequest(JsonObject requestOBJ, CommonU public String getOpenKMDocURL(String requestOBJ, String Authorization) { RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); + String fileUUID = null; JSONObject obj = new JSONObject(requestOBJ); if (obj.has("fileID")) { @@ -647,11 +646,7 @@ public String getOpenKMDocURL(String requestOBJ, String Authorization) { Map requestBody = new HashMap<>(); requestBody.put("fileUID", fileUUID); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(requestBody, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestBody, Authorization); ResponseEntity response = restTemplate.exchange(openkmDocUrl, HttpMethod.POST, request, String.class); return response.getBody(); diff --git a/src/main/java/com/iemr/hwc/service/dataSyncActivity/DownloadDataFromServerImpl.java b/src/main/java/com/iemr/hwc/service/dataSyncActivity/DownloadDataFromServerImpl.java index 452580db..847b7221 100644 --- a/src/main/java/com/iemr/hwc/service/dataSyncActivity/DownloadDataFromServerImpl.java +++ b/src/main/java/com/iemr/hwc/service/dataSyncActivity/DownloadDataFromServerImpl.java @@ -49,6 +49,7 @@ import com.iemr.hwc.data.syncActivity_syncLayer.TempVan; import com.iemr.hwc.repo.syncActivity_syncLayer.SyncDownloadMasterRepo; import com.iemr.hwc.repo.syncActivity_syncLayer.TempVanRepo; +import com.iemr.hwc.utils.RestTemplateUtil; import com.iemr.hwc.utils.mapper.InputMapper; @Service @@ -167,11 +168,7 @@ private int downloadDataFromServer(SyncDownloadMaster syncDownloadMaster, String // initializing RestTemplate RestTemplate restTemplate = new RestTemplate(); - // Multivalue map for headers with content-type and auth key - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", ServerAuthorization); - HttpEntity request = new HttpEntity(syncDownloadMaster, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(syncDownloadMaster, ServerAuthorization); // Call rest-template to call API to download master data for given table ResponseEntity response = restTemplate.exchange(dataSyncDownloadUrl, HttpMethod.POST, request, diff --git a/src/main/java/com/iemr/hwc/service/dataSyncActivity/UploadDataToServerImpl.java b/src/main/java/com/iemr/hwc/service/dataSyncActivity/UploadDataToServerImpl.java index 29c2aae3..3da7cfd2 100644 --- a/src/main/java/com/iemr/hwc/service/dataSyncActivity/UploadDataToServerImpl.java +++ b/src/main/java/com/iemr/hwc/service/dataSyncActivity/UploadDataToServerImpl.java @@ -46,6 +46,7 @@ import com.iemr.hwc.data.syncActivity_syncLayer.DataSyncGroups; import com.iemr.hwc.data.syncActivity_syncLayer.SyncUtilityClass; import com.iemr.hwc.repo.syncActivity_syncLayer.DataSyncGroupsRepo; +import com.iemr.hwc.utils.RestTemplateUtil; /*** * @@ -223,10 +224,7 @@ public String syncDataToServer(String schemaName, String tableName, String vanAu String requestOBJ = gson.toJson(dataMap); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - HttpEntity request = new HttpEntity(requestOBJ, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization); ResponseEntity response = restTemplate.exchange(dataSyncUploadUrl, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/service/registrar/RegistrarServiceImpl.java b/src/main/java/com/iemr/hwc/service/registrar/RegistrarServiceImpl.java index ab1e1bbb..6b0d540a 100644 --- a/src/main/java/com/iemr/hwc/service/registrar/RegistrarServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/registrar/RegistrarServiceImpl.java @@ -55,6 +55,7 @@ import com.iemr.hwc.data.benFlowStatus.BeneficiaryFlowStatus; import com.iemr.hwc.service.benFlowStatus.CommonBenStatusFlowServiceImpl; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import com.iemr.hwc.utils.mapper.InputMapper; import com.iemr.hwc.utils.response.OutputResponse; @@ -706,15 +707,7 @@ public String registerBeneficiary(String comingRequest, String Authorization) th Long beneficiaryID = null; RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); - // headers.add("Content-Type", MediaType.APPLICATION_JSON); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(comingRequest, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(comingRequest, Authorization); ResponseEntity response = restTemplate.exchange(registrationUrl, HttpMethod.POST, request, String.class); if (response.getStatusCodeValue() == 200 & response.hasBody()) { @@ -756,9 +749,7 @@ public String getBeneficiaryByBlockIDAndLastModDate(String villageID, Date lastM obj.put("villageID", Integer.parseInt(villageID)); obj.put("lastModifiedDate", lastModifDate.getTime()); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - HttpEntity request = new HttpEntity(obj.toString(), headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(obj.toString(), Authorization); ResponseEntity response = restTemplate.exchange(syncSearchByLocation, HttpMethod.POST, request, String.class); @@ -777,15 +768,7 @@ public String getBeneficiaryByBlockIDAndLastModDate(String villageID, Date lastM public Integer updateBeneficiary(String comingRequest, String Authorization) throws Exception { Integer returnOBJ = null; RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - MultiValueMap headers = new LinkedMultiValueMap(); - // headers.add("Content-Type", "application/json"); - headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(comingRequest, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(comingRequest, Authorization); ResponseEntity response = restTemplate.exchange(beneficiaryEditUrl, HttpMethod.POST, request, String.class); @@ -803,20 +786,13 @@ public Integer updateBeneficiary(String comingRequest, String Authorization) thr public String beneficiaryQuickSearch(String requestObj, String Authorization) { String returnOBJ = null; RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); JSONObject obj = new JSONObject(requestObj); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestObj, Authorization); if ((obj.has("beneficiaryID") && !obj.isNull("beneficiaryID")) || (obj.has("HealthID") && !obj.isNull("HealthID")) || (obj.has("HealthIDNumber") && !obj.isNull("HealthIDNumber")) || (obj.has("familyId") && !obj.isNull("familyId")) || (obj.has("identity") && !obj.isNull("identity"))) { - HttpEntity request = new HttpEntity(requestObj, headers); ResponseEntity response = restTemplate.exchange(registrarQuickSearchByIdUrl, HttpMethod.POST, request, String.class); if (response.hasBody()) @@ -824,7 +800,6 @@ public String beneficiaryQuickSearch(String requestObj, String Authorization) { } else { if (obj.has("phoneNo") && !obj.isNull("phoneNo")) { - HttpEntity request = new HttpEntity(requestObj, headers); ResponseEntity response = restTemplate.exchange(registrarQuickSearchByPhoneNoUrl, HttpMethod.POST, request, String.class); if (response.hasBody()) @@ -839,15 +814,7 @@ public String beneficiaryQuickSearch(String requestObj, String Authorization) { public String beneficiaryAdvanceSearch(String requestObj, String Authorization) { String returnOBJ = null; RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - JSONObject obj = new JSONObject(requestObj); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(requestObj, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestObj, Authorization); ResponseEntity response = restTemplate.exchange(registrarAdvanceSearchUrl, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/service/tele_consultation/SMSGatewayServiceImpl.java b/src/main/java/com/iemr/hwc/service/tele_consultation/SMSGatewayServiceImpl.java index 7f8051e3..db65c830 100644 --- a/src/main/java/com/iemr/hwc/service/tele_consultation/SMSGatewayServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/tele_consultation/SMSGatewayServiceImpl.java @@ -47,6 +47,7 @@ import com.iemr.hwc.data.tele_consultation.SmsRequestOBJ; import com.iemr.hwc.repo.tc_consultation.TCRequestModelRepo; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import jakarta.servlet.http.HttpServletRequest; @@ -194,17 +195,9 @@ public String createSMSRequest(String smsType, Long benRegID, Integer specializa } @Override - public String sendSMS(String request, String Authorization) { - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON)); - headers.set("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - - HttpEntity requestOBJ = new HttpEntity(request, headers); - - return restTemplate.exchange(sendSMSUrl, HttpMethod.POST, requestOBJ, String.class).getBody(); + public String sendSMS(String requestOBJ, String Authorization) { + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization); + + return restTemplate.exchange(sendSMSUrl, HttpMethod.POST, request, String.class).getBody(); } } diff --git a/src/main/java/com/iemr/hwc/service/tele_consultation/TeleConsultationServiceImpl.java b/src/main/java/com/iemr/hwc/service/tele_consultation/TeleConsultationServiceImpl.java index 57a2a1f3..8ca8aeee 100644 --- a/src/main/java/com/iemr/hwc/service/tele_consultation/TeleConsultationServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/tele_consultation/TeleConsultationServiceImpl.java @@ -60,6 +60,7 @@ import com.iemr.hwc.repo.tc_consultation.TeleconsultationStatsRepo; import com.iemr.hwc.service.common.transaction.CommonServiceImpl; import com.iemr.hwc.utils.CookieUtil; +import com.iemr.hwc.utils.RestTemplateUtil; import com.iemr.hwc.utils.mapper.InputMapper; import com.iemr.hwc.utils.mapper.OutputMapper; @@ -218,14 +219,7 @@ public int cancelSlotForTCCancel(int userID, long benRegID, long visitCode, Stri String requestOBJ = OutputMapper.gson().toJson(obj); RestTemplate restTemplate = new RestTemplate(); - HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) - .getRequest(); - String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader); - MultiValueMap headers = new LinkedMultiValueMap(); - headers.add("Content-Type", "application/json"); - headers.add("AUTHORIZATION", Authorization); - headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie); - HttpEntity request = new HttpEntity(requestOBJ, headers); + HttpEntity request = RestTemplateUtil.createRequestEntity(requestOBJ, Authorization); ResponseEntity response = restTemplate.exchange(tcSpecialistSlotCancel, HttpMethod.POST, request, String.class); diff --git a/src/main/java/com/iemr/hwc/utils/CookieUtil.java b/src/main/java/com/iemr/hwc/utils/CookieUtil.java index 6b37f49c..48beb5d8 100644 --- a/src/main/java/com/iemr/hwc/utils/CookieUtil.java +++ b/src/main/java/com/iemr/hwc/utils/CookieUtil.java @@ -23,8 +23,16 @@ public Optional getCookieValue(HttpServletRequest request, String cookie return Optional.empty(); } - public String getJwtTokenFromCookie(HttpServletRequest request) { - return Arrays.stream(request.getCookies()).filter(cookie -> "Jwttoken".equals(cookie.getName())) - .map(Cookie::getValue).findFirst().orElse(null); + public static String getJwtTokenFromCookie(HttpServletRequest request) { + Cookie[] cookies = request.getCookies(); + if (cookies == null) { + return null; // No cookies present, return null safely + } + + return Arrays.stream(cookies) + .filter(cookie -> "Jwttoken".equals(cookie.getName())) + .map(Cookie::getValue) + .findFirst() + .orElse(null); } } diff --git a/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java b/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java new file mode 100644 index 00000000..47f17a95 --- /dev/null +++ b/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java @@ -0,0 +1,44 @@ +package com.iemr.hwc.utils; + +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + + +import jakarta.servlet.http.HttpServletRequest; + +public class RestTemplateUtil { + public static HttpEntity createRequestEntity(Object body, String authorization) { + + ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()); + if (servletRequestAttributes == null) { + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8"); + headers.add(HttpHeaders.AUTHORIZATION, authorization); + return new HttpEntity<>(body, headers); + } + HttpServletRequest requestHeader = servletRequestAttributes.getRequest(); + String jwtTokenFromCookie = null; + try { + jwtTokenFromCookie = CookieUtil.getJwtTokenFromCookie(requestHeader); + + } catch (Exception e) { + e.printStackTrace(); + } + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8"); + headers.add(HttpHeaders.USER_AGENT, UserAgentContext.getUserAgent()); + headers.add(HttpHeaders.AUTHORIZATION, authorization); + headers.add("JwtToken",requestHeader.getHeader("JwtToken")); + headers.add(HttpHeaders.COOKIE, "Jwttoken=" + jwtTokenFromCookie); + + return new HttpEntity<>(body, headers); + } + +} + diff --git a/src/main/java/com/iemr/hwc/utils/UserAgentContext.java b/src/main/java/com/iemr/hwc/utils/UserAgentContext.java new file mode 100644 index 00000000..499fa782 --- /dev/null +++ b/src/main/java/com/iemr/hwc/utils/UserAgentContext.java @@ -0,0 +1,19 @@ +package com.iemr.hwc.utils; + +public class UserAgentContext { + private static final ThreadLocal userAgentHolder = new ThreadLocal<>(); + + public static void setUserAgent(String userAgent) { + userAgentHolder.set(userAgent); + } + + public static String getUserAgent() { + return userAgentHolder.get(); + } + + public static void clear() { + userAgentHolder.remove(); + } + +} + diff --git a/src/main/java/com/iemr/hwc/utils/http/AuthorizationHeaderRequestWrapper.java b/src/main/java/com/iemr/hwc/utils/http/AuthorizationHeaderRequestWrapper.java new file mode 100644 index 00000000..3c003781 --- /dev/null +++ b/src/main/java/com/iemr/hwc/utils/http/AuthorizationHeaderRequestWrapper.java @@ -0,0 +1,42 @@ +package com.iemr.hwc.utils.http; + +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; + +public class AuthorizationHeaderRequestWrapper extends HttpServletRequestWrapper{ + private final String Authorization; + + public AuthorizationHeaderRequestWrapper(HttpServletRequest request, String authHeaderValue) { + super(request); + this.Authorization = authHeaderValue; + } + + @Override + public String getHeader(String name) { + if ("Authorization".equalsIgnoreCase(name)) { + return Authorization; + } + return super.getHeader(name); + } + + @Override + public Enumeration getHeaders(String name) { + if ("Authorization".equalsIgnoreCase(name)) { + return Collections.enumeration(Collections.singletonList(Authorization)); + } + return super.getHeaders(name); + } + + @Override + public Enumeration getHeaderNames() { + List names = Collections.list(super.getHeaderNames()); + if (!names.contains("Authorization")) { + names.add("Authorization"); + } + return Collections.enumeration(names); + } +} diff --git a/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java b/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java index 86db2e74..1513416c 100644 --- a/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java +++ b/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java @@ -59,6 +59,10 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons authorization=preAuth.replace("Bearer ", ""); else authorization = preAuth; + if (authorization == null || authorization.isEmpty()) { + logger.info("Authorization header is null or empty. Skipping HTTPRequestInterceptor."); + return true; // Allow the request to proceed without validation + } if (!request.getMethod().equalsIgnoreCase("OPTIONS")) { try { String[] requestURIParts = request.getRequestURI().split("/"); From fc1c59c9893845686905b86770eeea0b00e3dc31 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 22 May 2025 19:43:44 +0530 Subject: [PATCH 05/13] null check --- .../com/iemr/hwc/utils/RestTemplateUtil.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java b/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java index 47f17a95..eeac359f 100644 --- a/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java +++ b/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java @@ -1,5 +1,7 @@ package com.iemr.hwc.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -8,10 +10,11 @@ import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; - import jakarta.servlet.http.HttpServletRequest; public class RestTemplateUtil { + private final static Logger logger = LoggerFactory.getLogger(RestTemplateUtil.class); + public static HttpEntity createRequestEntity(Object body, String authorization) { ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()); @@ -27,18 +30,21 @@ public static HttpEntity createRequestEntity(Object body, String authori jwtTokenFromCookie = CookieUtil.getJwtTokenFromCookie(requestHeader); } catch (Exception e) { - e.printStackTrace(); + logger.error("Error while getting jwtToken from Cookie" + e.getMessage() ); } MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8"); - headers.add(HttpHeaders.USER_AGENT, UserAgentContext.getUserAgent()); + if(null != UserAgentContext.getUserAgent()) { + headers.add(HttpHeaders.USER_AGENT, UserAgentContext.getUserAgent()); + } headers.add(HttpHeaders.AUTHORIZATION, authorization); headers.add("JwtToken",requestHeader.getHeader("JwtToken")); - headers.add(HttpHeaders.COOKIE, "Jwttoken=" + jwtTokenFromCookie); + if(null != jwtTokenFromCookie) { + headers.add(HttpHeaders.COOKIE, "Jwttoken=" + jwtTokenFromCookie); + } return new HttpEntity<>(body, headers); } -} - +} \ No newline at end of file From 2265fa4ac3dfcc41723c5543aae86efbd0263e69 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Sun, 25 May 2025 17:51:08 +0530 Subject: [PATCH 06/13] Constants added and null check --- .../java/com/iemr/hwc/utils/Constants.java | 9 ++++ .../hwc/utils/JwtUserIdValidationFilter.java | 43 +++++++++++-------- .../com/iemr/hwc/utils/RestTemplateUtil.java | 3 +- 3 files changed, 36 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/iemr/hwc/utils/Constants.java diff --git a/src/main/java/com/iemr/hwc/utils/Constants.java b/src/main/java/com/iemr/hwc/utils/Constants.java new file mode 100644 index 00000000..8b069602 --- /dev/null +++ b/src/main/java/com/iemr/hwc/utils/Constants.java @@ -0,0 +1,9 @@ +package com.iemr.hwc.utils; + +public class Constants { + public static final String JWT_TOKEN = "Jwttoken"; + public static final String USER_AGENT = "User-Agent"; + public static final String OKHTTP = "okhttp"; + + private Constants() {} +} diff --git a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java index d4ab409a..c6a6fec6 100644 --- a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java @@ -6,6 +6,8 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; +import com.iemr.hwc.utils.http.AuthorizationHeaderRequestWrapper; + import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; @@ -49,7 +51,6 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo } // Log headers for debugging - String jwtTokenFromHeader = request.getHeader("Jwttoken"); logger.info("JWT token from header: "); // Skip login and public endpoints @@ -64,35 +65,41 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo try { String jwtFromCookie = getJwtTokenFromCookies(request); - String jwtFromHeader = request.getHeader("JwtToken"); + String jwtFromHeader = request.getHeader(Constants.JWT_TOKEN); String authHeader = request.getHeader("Authorization"); if (jwtFromCookie != null) { logger.info("Validating JWT token from cookie"); if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromCookie)) { - filterChain.doFilter(servletRequest, servletResponse); + AuthorizationHeaderRequestWrapper authorizationHeaderRequestWrapper = new AuthorizationHeaderRequestWrapper( + request, ""); + filterChain.doFilter(authorizationHeaderRequestWrapper, servletResponse); return; } - } - - if (jwtFromHeader != null) { + } else if (jwtFromHeader != null) { logger.info("Validating JWT token from header"); if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromHeader)) { - filterChain.doFilter(servletRequest, servletResponse); + AuthorizationHeaderRequestWrapper authorizationHeaderRequestWrapper = new AuthorizationHeaderRequestWrapper( + request, ""); + filterChain.doFilter(authorizationHeaderRequestWrapper, servletResponse); + return; + } + } else { + String userAgent = request.getHeader(Constants.USER_AGENT); + logger.info("User-Agent: " + userAgent); + if (userAgent != null && isMobileClient(userAgent) && authHeader != null) { + try { + UserAgentContext.setUserAgent(userAgent); + filterChain.doFilter(servletRequest, servletResponse); + } finally { + UserAgentContext.clear(); + } return; } } - String userAgent = request.getHeader("User-Agent"); - logger.info("User-Agent: " + userAgent); - - if (userAgent != null && isMobileClient(userAgent) && authHeader != null) { - filterChain.doFilter(servletRequest, servletResponse); - return; - } - logger.warn("No valid authentication token found"); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized: Invalid or missing token"); - + } catch (Exception e) { logger.error("Authorization error: ", e); response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: " + e.getMessage()); @@ -103,14 +110,14 @@ private boolean isMobileClient(String userAgent) { if (userAgent == null) return false; userAgent = userAgent.toLowerCase(); - return userAgent.contains("okhttp"); // iOS (custom clients) + return userAgent.contains(Constants.OKHTTP); // iOS (custom clients) } private String getJwtTokenFromCookies(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); if (cookies != null) { for (Cookie cookie : cookies) { - if (cookie.getName().equals("Jwttoken")) { + if (cookie.getName().equalsIgnoreCase(Constants.JWT_TOKEN)) { return cookie.getValue(); } } diff --git a/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java b/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java index eeac359f..0ead0e45 100644 --- a/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java +++ b/src/main/java/com/iemr/hwc/utils/RestTemplateUtil.java @@ -39,7 +39,8 @@ public static HttpEntity createRequestEntity(Object body, String authori headers.add(HttpHeaders.USER_AGENT, UserAgentContext.getUserAgent()); } headers.add(HttpHeaders.AUTHORIZATION, authorization); - headers.add("JwtToken",requestHeader.getHeader("JwtToken")); + if(null != requestHeader.getHeader(Constants.JWT_TOKEN)) + headers.add(Constants.JWT_TOKEN,requestHeader.getHeader(Constants.JWT_TOKEN)); if(null != jwtTokenFromCookie) { headers.add(HttpHeaders.COOKIE, "Jwttoken=" + jwtTokenFromCookie); } From 3f2c71903d3dd9aa9c28593d5fe93cd72bbe0c1b Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 10 Jul 2025 12:27:15 +0530 Subject: [PATCH 07/13] Empty check added --- .../java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java b/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java index 1513416c..69f471c3 100644 --- a/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java +++ b/src/main/java/com/iemr/hwc/utils/http/HTTPRequestInterceptor.java @@ -124,7 +124,7 @@ public void postHandle(HttpServletRequest request, HttpServletResponse response, else authorization = postAuth; logger.debug("RequestURI::" + request.getRequestURI() + " || Authorization ::" + authorization); - if (authorization != null) { + if (authorization != null && !authorization.isEmpty()) { sessionObject.updateSessionObject(authorization, sessionObject.getSessionObject(authorization)); } } catch (Exception e) { From 07bfc15aab5806474bdbed31409d0b84ff610ca0 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 10 Jul 2025 12:41:45 +0530 Subject: [PATCH 08/13] Optimized code --- .../hwc/utils/JwtUserIdValidationFilter.java | 64 ++++++++----------- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java index 9ac53c7e..06a5ef2f 100644 --- a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java @@ -89,45 +89,33 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo } try { - String jwtFromCookie = getJwtTokenFromCookies(request); - String jwtFromHeader = request.getHeader(Constants.JWT_TOKEN); - String authHeader = request.getHeader("Authorization"); - - if (jwtFromCookie != null) { - logger.info("Validating JWT token from cookie"); - if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromCookie)) { - AuthorizationHeaderRequestWrapper authorizationHeaderRequestWrapper = new AuthorizationHeaderRequestWrapper( - request, ""); - filterChain.doFilter(authorizationHeaderRequestWrapper, servletResponse); - return; - } - } else if (jwtFromHeader != null) { - logger.info("Validating JWT token from header"); - if (jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromHeader)) { - AuthorizationHeaderRequestWrapper authorizationHeaderRequestWrapper = new AuthorizationHeaderRequestWrapper( - request, ""); - filterChain.doFilter(authorizationHeaderRequestWrapper, servletResponse); - return; - } - } else { - String userAgent = request.getHeader(Constants.USER_AGENT); - logger.info("User-Agent: " + userAgent); - if (userAgent != null && isMobileClient(userAgent) && authHeader != null) { - try { - UserAgentContext.setUserAgent(userAgent); - filterChain.doFilter(servletRequest, servletResponse); - } finally { - UserAgentContext.clear(); - } - return; - } - } - logger.warn("No valid authentication token found"); - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized: Invalid or missing token"); - + String jwtToken = getJwtTokenFromCookies(request); + String jwtFromHeader = request.getHeader(Constants.JWT_TOKEN); + String authHeader = request.getHeader("Authorization"); + + if ((jwtToken != null && jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtToken)) || + (jwtFromHeader != null && jwtAuthenticationUtil.validateUserIdAndJwtToken(jwtFromHeader))) { + AuthorizationHeaderRequestWrapper authorizationHeaderRequestWrapper = new AuthorizationHeaderRequestWrapper(request, ""); + filterChain.doFilter(authorizationHeaderRequestWrapper, servletResponse); + return; + } else { + String userAgent = request.getHeader(Constants.USER_AGENT); + logger.info("User-Agent: " + userAgent); + if (userAgent != null && isMobileClient(userAgent) && authHeader != null) { + try { + UserAgentContext.setUserAgent(userAgent); + filterChain.doFilter(servletRequest, servletResponse); + } finally { + UserAgentContext.clear(); + } + return; + } + } + logger.warn("No valid authentication token found"); + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized: Invalid or missing token"); } catch (Exception e) { - logger.error("Authorization error: ", e); - response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: " + e.getMessage()); + logger.error("Authorization error: ", e); + response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authorization error: " + e.getMessage()); } } From 65cfb4fa94c1a2fb7a9f13609bb396ca72e3f162 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 10 Jul 2025 13:05:27 +0530 Subject: [PATCH 09/13] removed commented code --- src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java index 06a5ef2f..630be9ee 100644 --- a/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java +++ b/src/main/java/com/iemr/hwc/utils/JwtUserIdValidationFilter.java @@ -142,7 +142,7 @@ private boolean isMobileClient(String userAgent) { if (userAgent == null) return false; userAgent = userAgent.toLowerCase(); - return userAgent.contains(Constants.OKHTTP); // iOS (custom clients) + return userAgent.contains(Constants.OKHTTP); } private String getJwtTokenFromCookies(HttpServletRequest request) { From ea0cd8d691d69af17a4890e67a7b1a889ed8f324 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 10 Jul 2025 21:16:02 +0530 Subject: [PATCH 10/13] Exception Handled and Null conditions added --- .../controller/wo/LocationControllerWo.java | 6 +- .../service/choApp/CHOAppSyncServiceImpl.java | 161 ++++++++++-------- 2 files changed, 93 insertions(+), 74 deletions(-) diff --git a/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java b/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java index 97ad555f..41fd5c97 100644 --- a/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java +++ b/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java @@ -198,19 +198,19 @@ public String updateGeolocationVillage(@RequestBody String requestObj) { public ResponseEntity getOutreachMasterForState(@PathVariable("stateID") Integer stateID) { logger.info("get Outreach programs for state with Id ..." + stateID); - OutputResponse outputResponse = new OutputResponse(); + response = new OutputResponse(); HttpStatus statusCode = HttpStatus.OK; MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add("Content-Type", "application/json"); try { String resList = locationServiceImpl.getOutreachProgramsList(stateID); - outputResponse.setResponse(resList); + response.setResponse(resList); } catch (Exception e) { logger.error("Error while fetching outreach list for stateId" + stateID); response.setError(500, "Unable to fetch outreach list for stateId" + stateID + "Exception - " + e); statusCode = HttpStatus.INTERNAL_SERVER_ERROR; } - return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(), headers, statusCode); + return new ResponseEntity<>(response.toStringWithSerializeNulls(), headers, statusCode); } } \ No newline at end of file diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index 27b6219d..bb204d97 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -604,36 +604,44 @@ public ResponseEntity savePrescriptionTemplatesToServer(List(outputResponse.toString(),headers,statusCode); } - @Override - public ResponseEntity savePrescriptionTemplatesToApp(Integer userID, String authorization) { - OutputResponse outputResponse = new OutputResponse(); - HttpStatus statusCode = HttpStatus.OK; - - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", "application/json"); - - List templateList = prescriptionTemplatesRepo.getPrescriptionTemplatesByUserID(userID); - - outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create().toJson(templateList)); - - return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(),headers,statusCode); - } - - @Override - public ResponseEntity deletePrescriptionTemplates(Integer userID, Integer tempID) { - OutputResponse outputResponse = new OutputResponse(); - HttpStatus statusCode = HttpStatus.OK; - - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", "application/json"); - - prescriptionTemplatesRepo.deletePrescriptionTemplatesByUserIDAndTempID(userID, tempID); - - outputResponse.setResponse("Successfully deleted"); - - return new ResponseEntity<>(outputResponse.toString(),headers,statusCode); - } - + @Override + public ResponseEntity savePrescriptionTemplatesToApp(Integer userID, String authorization) { + OutputResponse outputResponse = new OutputResponse(); + HttpStatus statusCode = HttpStatus.OK; + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", "application/json"); + try { + List templateList = prescriptionTemplatesRepo + .getPrescriptionTemplatesByUserID(userID); + outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls() + .create().toJson(templateList)); + } catch (Exception e) { + logger.error("Error while fetching Prescription Templates userID : " + userID); + outputResponse.setError(500, "Unable to fetch Prescription Templates userID" + userID + "Exception - " + e); + statusCode = HttpStatus.INTERNAL_SERVER_ERROR; + + } + return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(), headers, statusCode); + } + + @Override + public ResponseEntity deletePrescriptionTemplates(Integer userID, Integer tempID) { + OutputResponse outputResponse = new OutputResponse(); + HttpStatus statusCode = HttpStatus.OK; + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", "application/json"); + try { + prescriptionTemplatesRepo.deletePrescriptionTemplatesByUserIDAndTempID(userID, tempID); + outputResponse.setResponse("Successfully deleted"); + } catch (Exception e) { + logger.error("Error while deleting Prescription Templates userID : " + userID + " tempID : " + tempID); + outputResponse.setError(500, "Unable to delete Prescription Templates userID : " + userID + " tempID " + + tempID + "Exception - " + e); + statusCode = HttpStatus.INTERNAL_SERVER_ERROR; + } + return new ResponseEntity<>(outputResponse.toString(), headers, statusCode); + } @Override public ResponseEntity createNewOutreachActivity(OutreachActivity activity, String authorization) { @@ -674,45 +682,56 @@ public ResponseEntity createNewOutreachActivity(OutreachActivity activit return new ResponseEntity<>(outputResponse.toString(),headers,statusCode); } - @Override - public ResponseEntity getActivitiesByUser(Integer userId, String authorization) { - OutputResponse outputResponse = new OutputResponse(); - HttpStatus statusCode = HttpStatus.OK; - - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", "application/json"); - - ArrayList activitiesObj = outreachActivityRepo.getActivitiesByUserID(userId); - - ArrayList activities = OutreachActivity.getActivitiesForUser(activitiesObj); - - outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create().toJson(activities)); - - return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(),headers,statusCode); - } - - @Override - public ResponseEntity getActivityById(Integer activityId, String authorization) { - OutputResponse outputResponse = new OutputResponse(); - HttpStatus statusCode = HttpStatus.OK; - - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", "application/json"); - - OutreachActivity activity = outreachActivityRepo.findById(activityId).get(); - - if (activity != null && activity.getImg1Data() != null){ - String img1 = Base64.getEncoder().encodeToString(activity.getImg1Data()); - activity.setImg1(img1); - } - - if (activity != null && activity.getImg2Data() != null){ - String img2 = Base64.getEncoder().encodeToString(activity.getImg2Data()); - activity.setImg2(img2); - } - - outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create().toJson(activity)); - - return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(),headers,statusCode); - } + @Override + public ResponseEntity getActivitiesByUser(Integer userId, String authorization) { + OutputResponse outputResponse = new OutputResponse(); + HttpStatus statusCode = HttpStatus.OK; + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", "application/json"); + try { + ArrayList activitiesObj = outreachActivityRepo.getActivitiesByUserID(userId); + + ArrayList activities = OutreachActivity.getActivitiesForUser(activitiesObj); + + outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls() + .create().toJson(activities)); + } catch (Exception e) { + logger.error("Encountered exception while fetching activity userId : " + userId); + outputResponse.setError(500, "Encountered exception while fetching activity. " + e); + statusCode = HttpStatus.INTERNAL_SERVER_ERROR; + } + return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(), headers, statusCode); + } + + @Override + public ResponseEntity getActivityById(Integer activityId, String authorization) { + OutputResponse outputResponse = new OutputResponse(); + HttpStatus statusCode = HttpStatus.OK; + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", "application/json"); + try { + OutreachActivity activity = outreachActivityRepo.findById(activityId).get(); + if (null != activity) { + if (activity.getImg1Data() != null) { + String img1 = Base64.getEncoder().encodeToString(activity.getImg1Data()); + activity.setImg1(img1); + } + + if (activity.getImg2Data() != null) { + String img2 = Base64.getEncoder().encodeToString(activity.getImg2Data()); + activity.setImg2(img2); + } + + outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls() + .create().toJson(activity)); + } + } catch (Exception e) { + logger.error("Encountered exception while fetching activity activityId " + activityId); + outputResponse.setError(500, "Encountered exception while fetching activity. " + e); + statusCode = HttpStatus.INTERNAL_SERVER_ERROR; + } + return new ResponseEntity<>(outputResponse.toStringWithSerializeNulls(), headers, statusCode); + } } From 58766a50a27251a6adbc5dd0c0cb8983945e03bb Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Thu, 10 Jul 2025 21:38:49 +0530 Subject: [PATCH 11/13] Coderabbit comments addressed --- .../com/iemr/hwc/controller/wo/LocationControllerWo.java | 2 +- .../iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java b/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java index 41fd5c97..289d3fcb 100644 --- a/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java +++ b/src/main/java/com/iemr/hwc/controller/wo/LocationControllerWo.java @@ -198,7 +198,7 @@ public String updateGeolocationVillage(@RequestBody String requestObj) { public ResponseEntity getOutreachMasterForState(@PathVariable("stateID") Integer stateID) { logger.info("get Outreach programs for state with Id ..." + stateID); - response = new OutputResponse(); + OutputResponse response = new OutputResponse(); HttpStatus statusCode = HttpStatus.OK; MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add("Content-Type", "application/json"); diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index bb204d97..0065139a 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -712,8 +712,9 @@ public ResponseEntity getActivityById(Integer activityId, String authori MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add("Content-Type", "application/json"); try { - OutreachActivity activity = outreachActivityRepo.findById(activityId).get(); - if (null != activity) { + Optional activityOptional = outreachActivityRepo.findById(activityId); + if (activityOptional.isPresent()) { + OutreachActivity activity = activityOptional.get(); if (activity.getImg1Data() != null) { String img1 = Base64.getEncoder().encodeToString(activity.getImg1Data()); activity.setImg1(img1); @@ -726,6 +727,9 @@ public ResponseEntity getActivityById(Integer activityId, String authori outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls() .create().toJson(activity)); + }else { + outputResponse.setError(404, "Activity not found with ID : "+activityId); + statusCode = HttpStatus.NOT_FOUND; } } catch (Exception e) { logger.error("Encountered exception while fetching activity activityId " + activityId); From 16bc0685927a7e1a2c6090c6bb5c6a7ba4034eb5 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Fri, 18 Jul 2025 12:26:37 +0530 Subject: [PATCH 12/13] AMM-1473 --- .../iemr/hwc/service/ncdscreening/NCDScreeningServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/iemr/hwc/service/ncdscreening/NCDScreeningServiceImpl.java b/src/main/java/com/iemr/hwc/service/ncdscreening/NCDScreeningServiceImpl.java index a71dd78d..c7f58da6 100644 --- a/src/main/java/com/iemr/hwc/service/ncdscreening/NCDScreeningServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/ncdscreening/NCDScreeningServiceImpl.java @@ -1697,7 +1697,7 @@ public String fetchConfirmedScreeningDisease(Long beneficiaryRegId) throws IEMRE List resultSet = hypertensionScreeningRepo.fetchConfirmedScreening(beneficiaryRegId); if (resultSet != null && resultSet.size() > 0) { for (Object[] obj : resultSet) { - map.put("beneficiaryRegId", obj[0] != null ? ((BigInteger) obj[0]).longValue() : null); + map.put("beneficiaryRegId", obj[0] != null ? ((Long) obj[0]) : null); if (obj[1] != null && (Boolean) obj[1] == true) response.add("Diabetes Mellitus"); if (obj[2] != null && (Boolean) obj[2] == true) From 699dcaf9cafe5a3fcbe53e8d1bdfd66f39e18b26 Mon Sep 17 00:00:00 2001 From: Ravi Shanigarapu Date: Mon, 21 Jul 2025 14:33:04 +0530 Subject: [PATCH 13/13] AMM-1733 --- .../benFlowStatus/BeneficiaryFlowStatus.java | 26 ++++++++++++------- .../BeneficiaryFlowStatusRepo.java | 18 ++++++------- .../transaction/CommonNurseServiceImpl.java | 6 ++++- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/iemr/hwc/data/benFlowStatus/BeneficiaryFlowStatus.java b/src/main/java/com/iemr/hwc/data/benFlowStatus/BeneficiaryFlowStatus.java index c99aeab0..79861a4d 100644 --- a/src/main/java/com/iemr/hwc/data/benFlowStatus/BeneficiaryFlowStatus.java +++ b/src/main/java/com/iemr/hwc/data/benFlowStatus/BeneficiaryFlowStatus.java @@ -25,6 +25,11 @@ import java.util.ArrayList; import java.util.List; +import com.google.gson.annotations.Expose; +import com.iemr.hwc.annotation.sqlInjectionSafe.SQLInjectionSafe; +import com.iemr.hwc.data.login.MasterVan; +import com.iemr.hwc.data.masterdata.registrar.GenderMaster; + import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -36,11 +41,6 @@ import jakarta.persistence.Table; import jakarta.persistence.Transient; -import com.google.gson.annotations.Expose; -import com.iemr.hwc.annotation.sqlInjectionSafe.SQLInjectionSafe; -import com.iemr.hwc.data.login.MasterVan; -import com.iemr.hwc.data.masterdata.registrar.GenderMaster; - /*** * * @author NE298657 @@ -296,11 +296,19 @@ public class BeneficiaryFlowStatus { @Column(name = "referred_visit_id") private Long referred_visit_id; - @Expose - @Column(name = "is_high_risk", insertable = false, updatable = false) - private Boolean is_high_risk; - + @Transient + Boolean is_high_risk; + + + public Boolean isIs_high_risk() { + return is_high_risk; + } + + public void setIs_high_risk(boolean is_high_risk) { + this.is_high_risk = is_high_risk; + } + @Transient private I_bendemographics i_bendemographics; @Transient diff --git a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java index 761db390..10c03710 100644 --- a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java +++ b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java @@ -51,15 +51,12 @@ public interface BeneficiaryFlowStatusRepo extends CrudRepository getNurseWorklistNew( // @Param("providerServiceMapId") Integer providerServiceMapId, @Param("vanID") Integer vanID); - @Query(value = "SELECT t.*, anc.is_high_risk as is_high_risk FROM i_ben_flow_outreach t " - + "INNER JOIN t_anc_visit anc ON t.beneficiary_id = anc.ben_id " - + "WHERE (t.nurse_flag = 1 OR t.nurse_flag = 100) " - + "AND (t.specialist_flag <> 100 OR t.specialist_flag IS NULL) " + "AND t.deleted = false " - + "AND DATE(t.created_date) >= DATE(:fromDate) " + "AND t.providerServiceMapId = :providerServiceMapId " - + "AND t.vanID = :vanID " + "ORDER BY t.created_date DESC", nativeQuery = true) - public ArrayList getNurseWorklistNew(@Param("providerServiceMapId") Integer providerServiceMapId, - @Param("vanID") Integer vanID, @Param("fromDate") Timestamp fromDate); - + @Query("SELECT t from BeneficiaryFlowStatus t WHERE (t.nurseFlag = 1 OR t.nurseFlag = 100) AND (t.specialist_flag <> 100 OR t.specialist_flag is null) AND t.deleted = false " + + " AND Date(t.visitDate) >= Date(:fromDate) AND t.providerServiceMapId = :providerServiceMapId " + + " AND t.vanID = :vanID ORDER BY t.visitDate DESC ") + public ArrayList getNurseWorklistNew( + @Param("providerServiceMapId") Integer providerServiceMapId, @Param("vanID") Integer vanID, + @Param("fromDate") Timestamp fromDate); // nurse worklist TC current date @Query("SELECT t from BeneficiaryFlowStatus t WHERE (t.specialist_flag != 0 AND t.specialist_flag != 100 AND t.specialist_flag is not null)" + " AND t.deleted = false AND DATE(t.benVisitDate) >= DATE(:fromDate) " @@ -460,5 +457,8 @@ public int updateLabTechnicianFlag(@Param("lab_technician_flag") Short lab_techn @Query("SELECT COUNT(t) from BeneficiaryFlowStatus t WHERE t.villageID IN :villageIDs AND t.modified_date > :lastModDate ") Long getFlowRecordsCount(@Param("villageIDs") List villageID, @Param("lastModDate") Timestamp lastModDate); + + @Query(value = "SELECT is_high_risk from t_anc_visit t WHERE t.ben_id = :ben_id order by 1 desc limit 1",nativeQuery = true) + public Boolean getIsHighrisk(@Param("ben_id") Long ben_id); } diff --git a/src/main/java/com/iemr/hwc/service/common/transaction/CommonNurseServiceImpl.java b/src/main/java/com/iemr/hwc/service/common/transaction/CommonNurseServiceImpl.java index cfb7e9b5..76c26a51 100644 --- a/src/main/java/com/iemr/hwc/service/common/transaction/CommonNurseServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/common/transaction/CommonNurseServiceImpl.java @@ -3545,7 +3545,11 @@ public String getNurseWorkListNew(Integer providerServiceMapId, Integer vanID) { ArrayList obj = beneficiaryFlowStatusRepo.getNurseWorklistNew(providerServiceMapId, vanID, fromDate); - + for (BeneficiaryFlowStatus beneficiaryFlowStatus : obj) { + Boolean isHighrisk = beneficiaryFlowStatusRepo.getIsHighrisk(beneficiaryFlowStatus.getBeneficiaryID()); + if(null != isHighrisk) + beneficiaryFlowStatus.setIs_high_risk(isHighrisk); + } return new Gson().toJson(obj); }