Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ public interface DiseaseRepository extends CrudRepository<Disease, Integer> {
@Query("UPDATE Disease set deleted = :deleted where diseasesummaryID = :diseasesummaryID")
public int deleteDisease(@Param("diseasesummaryID") Integer diseasesummaryID,@Param("deleted") Boolean deleted);

@Query("Select count(*) from Disease disease ")
public Integer getDiseaseCount();
@Query("Select count(*) from Disease disease d where d.deleted = false")
public Integer getDiseaseCountExcludingDeleted();

@Transactional
@Modifying
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
import com.iemr.helpline104.reposotory.IMRMMR.IMRMMRRepository;
import com.iemr.helpline104.sms.SmsRequestOBJ;
import com.iemr.helpline104.utils.CookieUtil;
import com.iemr.helpline104.utils.RestTemplateUtil;
import com.iemr.helpline104.utils.mapper.InputMapper;

import jakarta.servlet.http.HttpServletRequest;
Expand Down Expand Up @@ -198,11 +199,7 @@ public void createEmailGateway(String emailID, String requestID, String Authoriz
emailReqObj.put("requestID", requestID);
emailReqObj.put("emailType", IMRMMREmailTemplate);
emailReqObj.put("emailID", emailID);
HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
.getRequest();
String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(requestHeader);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Cookie", "Jwttoken=" + jwtTokenFromCookie);

try {
String emailStatus = restTemplate(new Gson().toJson(emailReqObj), sendEmailGeneralUrl, Authorization);
if (emailStatus != null) {
Expand Down Expand Up @@ -283,11 +280,7 @@ public String createSMSRequest(String smsType, Long benRegID, Integer stateID, S
}

public String restTemplate(String request, String url, String Authorization) {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
headers.set("AUTHORIZATION", Authorization);

HttpEntity<Object> requestOBJ = new HttpEntity<Object>(request, headers);
HttpEntity<Object> requestOBJ = RestTemplateUtil.createRequestEntity(request, Authorization);
RestTemplate restTemplate = new RestTemplate();
return restTemplate.exchange(url, HttpMethod.POST, requestOBJ, String.class).getBody();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
import com.iemr.helpline104.repository.location.LocationDistrictBlockRepository;
import com.iemr.helpline104.repository.location.LocationDistrictRepository;
import com.iemr.helpline104.utils.CookieUtil;
import com.iemr.helpline104.utils.RestTemplateUtil;
import com.iemr.helpline104.utils.config.ConfigProperties;
import com.iemr.helpline104.utils.exception.IEMRException;
import com.iemr.helpline104.utils.http.HttpUtils;
Expand Down Expand Up @@ -193,13 +194,8 @@ else if (phoneNo != null) {
private OutputResponse createFeedback(String feedbackDetails, HttpServletRequest request) throws IEMRException, JsonMappingException, JsonProcessingException {
RestTemplate restTemplate = new RestTemplate();
ObjectMapper objectMapper = new ObjectMapper();
String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(request);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/json");
headers.add("AUTHORIZATION", request.getHeader("Authorization"));
headers.add("Jwttoken", jwtTokenFromCookie);
String url = properties.getPropertyByName("common-url") + "/" + properties.getPropertyByName("create-feedback");
HttpEntity<Object> request1 = new HttpEntity<Object>(feedbackDetails, headers);
HttpEntity<Object> request1 = RestTemplateUtil.createRequestEntity(feedbackDetails, request.getHeader("Authorization"));
ResponseEntity<String> responseStr = restTemplate.exchange(url, HttpMethod.POST, request1, String.class);
OutputResponse response = objectMapper.readValue(responseStr.getBody(), OutputResponse.class);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import org.springframework.stereotype.Service;

import com.iemr.helpline104.data.disease.Disease;
import com.iemr.helpline104.repository.beneficiarycall.BeneficiaryCallRepository;
import com.iemr.helpline104.repository.disease.DiseaseRepository;
import com.iemr.helpline104.utils.exception.IEMRException;
import com.iemr.helpline104.utils.mapper.InputMapper;
Expand All @@ -54,9 +55,14 @@ public class DiseaseServiceImpl implements DiseaseService{
@PersistenceContext
private EntityManager entityManager;

@Autowired
// @Autowired
DiseaseRepository diseaseRepository;

@Autowired
private void setDiseaseRepository(DiseaseRepository diseaseRepository) {
this.diseaseRepository = diseaseRepository;
}

@Override
public String saveDisease(String request) {
logger.info("saveDisease - Start");
Expand Down Expand Up @@ -98,37 +104,58 @@ public String deleteDisease(String request) {

@Override
public String getDisease(String request) throws IEMRException {
logger.info("getDisease - Start");
Disease disease = InputMapper.gson().fromJson(request, Disease.class);
Integer totalCount = diseaseRepository.getDiseaseCount();

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Disease> criteriaQuery = criteriaBuilder.createQuery(Disease.class);
Root<Disease> root = criteriaQuery.from(Disease.class);
List<Predicate> predicates = new ArrayList<Predicate>();
logger.info("getDisease - Start");

Disease disease = InputMapper.gson().fromJson(request, Disease.class);

if (disease == null) {
throw new IEMRException("Invalid request: Unable to parse disease object");
}

Integer totalCount = diseaseRepository.getDiseaseCountExcludingDeleted();

criteriaQuery.select(root).where(predicates.toArray(new Predicate[] {}));
TypedQuery<Disease> typedQuery = entityManager.createQuery(criteriaQuery);

if (disease.getPageNo() != null && disease.getPageSize() != null)
{
typedQuery.setMaxResults(disease.getPageSize())
.setFirstResult((disease.getPageNo() - 1) * disease.getPageSize());
}

List<Disease> list=typedQuery.getResultList();

Integer totalPages= getPageCount(totalCount, disease.getPageSize());

Map<String, Object> responseMap = new HashMap<>();

responseMap.put("DiseaseList", list);
responseMap.put("totalPages", totalPages);

logger.info("getDisease - End");
return responseMap.toString();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Disease> criteriaQuery = criteriaBuilder.createQuery(Disease.class);
Root<Disease> root = criteriaQuery.from(Disease.class);

List<Predicate> predicates = new ArrayList<>();

// Exclude deleted diseases (assuming soft delete logic)
predicates.add(criteriaBuilder.equal(root.get("deleted"), false));

// Build query with predicates and sorting by newest first
criteriaQuery.select(root)
.where(predicates.toArray(new Predicate[0]))
.orderBy(criteriaBuilder.desc(root.get("diseasesummaryID")));

logger.info("Executing disease fetch query with predicates: {}" , predicates);

TypedQuery<Disease> typedQuery = entityManager.createQuery(criteriaQuery);

// Apply pagination if provided
if (disease.getPageNo() != null && disease.getPageSize() != null) {
if (disease.getPageNo()<=0 || disease.getPageSize()<=0) {
throw new IEMRException("Invalid pagination parameter, page no and page size must be positive");
}

int offset = (disease.getPageNo() - 1) * disease.getPageSize();
typedQuery.setFirstResult(offset);
typedQuery.setMaxResults(disease.getPageSize());
}

List<Disease> list = typedQuery.getResultList();

Integer totalPages = getPageCount(totalCount, disease.getPageSize());

Map<String, Object> responseMap = new HashMap<>();
responseMap.put("DiseaseList", list);
responseMap.put("totalPages", totalPages);

logger.info("getDisease - End");

return responseMap.toString();
}

private int getPageCount(Integer totalCount, Integer pageSize) {
if (pageSize > 0) {
if (totalCount % pageSize == 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
import com.iemr.helpline104.repository.location.LocationDistrictBlockRepository;
import com.iemr.helpline104.repository.location.LocationDistrictRepository;
import com.iemr.helpline104.utils.CookieUtil;
import com.iemr.helpline104.utils.RestTemplateUtil;
import com.iemr.helpline104.utils.config.ConfigProperties;
import com.iemr.helpline104.utils.exception.IEMRException;
import com.iemr.helpline104.utils.http.HttpUtils;
Expand Down Expand Up @@ -189,13 +190,8 @@ else if (requestID != null) {
private OutputResponse createFeedback(String feedbackDetails, HttpServletRequest request) throws IEMRException, JsonMappingException, JsonProcessingException {
RestTemplate restTemplate = new RestTemplate();
ObjectMapper objectMapper = new ObjectMapper();
String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(request);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/json");
headers.add("AUTHORIZATION", request.getHeader("Authorization"));
headers.add("Jwttoken", jwtTokenFromCookie);
String url = properties.getPropertyByName("common-url") + "/" + properties.getPropertyByName("create-feedback");
HttpEntity<Object> request1 = new HttpEntity<Object>(feedbackDetails, headers);
HttpEntity<Object> request1 = RestTemplateUtil.createRequestEntity(feedbackDetails, request.getHeader("Authorization"));
ResponseEntity<String> responseStr = restTemplate.exchange(url, HttpMethod.POST, request1, String.class);
OutputResponse response = objectMapper.readValue(responseStr.getBody(), OutputResponse.class);
return response;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import com.iemr.helpline104.repository.feedback.FeedbackRepository;
import com.iemr.helpline104.repository.feedbackType.FeedbackTypeRepository;
import com.iemr.helpline104.utils.CookieUtil;
import com.iemr.helpline104.utils.RestTemplateUtil;
import com.iemr.helpline104.utils.config.ConfigProperties;
import com.iemr.helpline104.utils.exception.IEMRException;
import com.iemr.helpline104.utils.http.HttpUtils;
Expand Down Expand Up @@ -334,13 +335,8 @@ private OutputResponse createFeedback(String feedbackDetails, HttpServletRequest
logger.info("createFeedback request: " + feedbackDetails);
RestTemplate restTemplate = new RestTemplate();
ObjectMapper objectMapper = new ObjectMapper();
String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(request);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/json");
headers.add("AUTHORIZATION", request.getHeader("Authorization"));
headers.add("Jwttoken", jwtTokenFromCookie);
String url = properties.getPropertyByName("common-url") + "/" + properties.getPropertyByName("create-feedback");
HttpEntity<Object> request1 = new HttpEntity<Object>(feedbackDetails, headers);
HttpEntity<Object> request1 = RestTemplateUtil.createRequestEntity(feedbackDetails, request.getHeader("Authorization"));
ResponseEntity<String> responseStr = restTemplate.exchange(url, HttpMethod.POST, request1, String.class);
OutputResponse response = objectMapper.readValue(responseStr.getBody(), OutputResponse.class);
logger.info("createFeedback resonse from common: " + response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import com.iemr.helpline104.repository.feedbackType.FeedbackTypeRepository;
import com.iemr.helpline104.repository.foodSafetyCopmlaint.FoodSafetyCopmlaintRepository;
import com.iemr.helpline104.utils.CookieUtil;
import com.iemr.helpline104.utils.RestTemplateUtil;
import com.iemr.helpline104.utils.config.ConfigProperties;
import com.iemr.helpline104.utils.exception.IEMRException;
import com.iemr.helpline104.utils.http.HttpUtils;
Expand Down Expand Up @@ -209,13 +210,10 @@ public T_FoodSafetyCopmlaint save(T_FoodSafetyCopmlaint t_foodSafetyCopmlaint, H
private OutputResponse createFeedback(String feedbackDetails, HttpServletRequest request) throws IEMRException, JsonMappingException, JsonProcessingException {
RestTemplate restTemplate = new RestTemplate();
ObjectMapper objectMapper = new ObjectMapper();
String jwtTokenFromCookie = cookieUtil.getJwtTokenFromCookie(request);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<String, String>();
headers.add("Content-Type", "application/json");
headers.add("AUTHORIZATION", request.getHeader("Authorization"));
headers.add("Jwttoken", jwtTokenFromCookie);

String url = properties.getPropertyByName("common-url") + "/" + properties.getPropertyByName("create-feedback");
HttpEntity<Object> request1 = new HttpEntity<Object>(feedbackDetails, headers);
HttpEntity<Object> request1 = RestTemplateUtil.createRequestEntity(feedbackDetails, request.getHeader("Authorization"));

ResponseEntity<String> responseStr = restTemplate.exchange(url, HttpMethod.POST, request1, String.class);
OutputResponse response = objectMapper.readValue(responseStr.getBody(), OutputResponse.class);
return response;
Expand Down
5 changes: 4 additions & 1 deletion src/main/java/com/iemr/helpline104/utils/CookieUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ public Optional<String> getCookieValue(HttpServletRequest request, String cookie
return Optional.empty();
}

public String getJwtTokenFromCookie(HttpServletRequest request) {
public static String getJwtTokenFromCookie(HttpServletRequest request) {
if (request.getCookies() == null) {
return null; // If cookies are null, return null safely.
}
return Arrays.stream(request.getCookies()).filter(cookie -> "Jwttoken".equals(cookie.getName()))
.map(Cookie::getValue).findFirst().orElse(null);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import com.iemr.helpline104.utils.http.AuthorizationHeaderRequestWrapper;

import jakarta.servlet.Filter;
import jakarta.servlet.FilterChain;
Expand Down Expand Up @@ -74,29 +75,36 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo
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("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());
Expand Down
50 changes: 50 additions & 0 deletions src/main/java/com/iemr/helpline104/utils/RestTemplateUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.iemr.helpline104.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 {
private final static Logger logger = LoggerFactory.getLogger(RestTemplateUtil.class);

public static HttpEntity<Object> createRequestEntity(Object body, String authorization) {

ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());
if (servletRequestAttributes == null) {
MultiValueMap<String, String> 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) {
logger.error("Error while getting jwtToken from Cookie" + e.getMessage() );
}

MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
headers.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8");
if(null != UserAgentContext.getUserAgent()) {
headers.add(HttpHeaders.USER_AGENT, UserAgentContext.getUserAgent());
}
headers.add(HttpHeaders.AUTHORIZATION, authorization);
headers.add("JwtToken",requestHeader.getHeader("JwtToken"));
if(null != jwtTokenFromCookie) {
headers.add(HttpHeaders.COOKIE, "Jwttoken=" + jwtTokenFromCookie);
}

return new HttpEntity<>(body, headers);
}

}
18 changes: 18 additions & 0 deletions src/main/java/com/iemr/helpline104/utils/UserAgentContext.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.iemr.helpline104.utils;

public class UserAgentContext {
private static final ThreadLocal<String> 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();
}

}
Loading
Loading