From 19530f33991b6b8b924c794fa4734d429be2bcc5 Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Tue, 7 Apr 2026 17:12:45 +0530 Subject: [PATCH 1/2] fix: proxy OpenKM file download and return base64 content API now downloads file from OpenKM server-side and returns base64 instead of the URL with embedded credentials that browsers block. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../common/transaction/CommonServiceImpl.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java b/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java index 2468f356..c4b05f23 100644 --- a/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java +++ b/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java @@ -21,8 +21,12 @@ */ package com.iemr.tm.service.common.transaction; +import java.net.URL; +import java.net.HttpURLConnection; +import java.io.InputStream; import java.text.ParseException; import java.util.ArrayList; +import java.util.Base64; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -554,7 +558,7 @@ public TeleconsultationRequestOBJ createTcRequest(JsonObject requestOBJ, CommonU // end - public String getOpenKMDocURL(String requestOBJ, String Authorization) throws JSONException { + public String getOpenKMDocURL(String requestOBJ, String Authorization) throws Exception { RestTemplate restTemplate = new RestTemplate(); HttpServletRequest requestHeader = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()) .getRequest(); @@ -586,7 +590,19 @@ public String getOpenKMDocURL(String requestOBJ, String Authorization) throws JS String fileUrl = dataObj.getString("response"); // Fix malformed URL: https://user:pass@https://host -> https://user:pass@host fileUrl = fileUrl.replaceAll("@https?://", "@"); - return fileUrl; + // Download file from OpenKM and return as base64 + URL url = new URL(fileUrl); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + if (url.getUserInfo() != null) { + String basicAuth = "Basic " + Base64.getEncoder().encodeToString(url.getUserInfo().getBytes()); + conn.setRequestProperty("Authorization", basicAuth); + } + try (InputStream is = conn.getInputStream()) { + byte[] fileBytes = is.readAllBytes(); + return Base64.getEncoder().encodeToString(fileBytes); + } finally { + conn.disconnect(); + } } } return dataVal.toString(); From 8b6931c29721c3cdcc584660d86697074b2d83dd Mon Sep 17 00:00:00 2001 From: vishwab1 Date: Tue, 7 Apr 2026 17:59:06 +0530 Subject: [PATCH 2/2] fix: return fileName with base64 file content in getKMFile response - Add getFileName query to fetch original fileName from t_kmfilemanager - Return JSON with fileContent (base64) and fileName instead of raw base64 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../java/com/iemr/tm/repo/nurse/BenVisitDetailRepo.java | 3 +++ .../tm/service/common/transaction/CommonServiceImpl.java | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/tm/repo/nurse/BenVisitDetailRepo.java b/src/main/java/com/iemr/tm/repo/nurse/BenVisitDetailRepo.java index 33ca2c8b..456e9901 100644 --- a/src/main/java/com/iemr/tm/repo/nurse/BenVisitDetailRepo.java +++ b/src/main/java/com/iemr/tm/repo/nurse/BenVisitDetailRepo.java @@ -91,6 +91,9 @@ public List getBeneficiaryVisitDetails(@Param("benRegID") Long benRegI @Query(nativeQuery = true, value = " SELECT FileUID from t_kmfilemanager where KmFileManagerID = :fileID ") public String getFileUUID(@Param("fileID") int fileID); + @Query(nativeQuery = true, value = " SELECT FileName from t_kmfilemanager where KmFileManagerID = :fileID ") + public String getFileName(@Param("fileID") int fileID); + // get file uuid from file id @Transactional @Modifying diff --git a/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java b/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java index c4b05f23..21b2d882 100644 --- a/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java +++ b/src/main/java/com/iemr/tm/service/common/transaction/CommonServiceImpl.java @@ -565,7 +565,9 @@ public String getOpenKMDocURL(String requestOBJ, String Authorization) throws Ex String fileUUID = null; JSONObject obj = new JSONObject(requestOBJ); if (obj.has("fileID")) { - fileUUID = benVisitDetailRepo.getFileUUID(obj.getInt("fileID")); + int fileID = obj.getInt("fileID"); + fileUUID = benVisitDetailRepo.getFileUUID(fileID); + String fileName = benVisitDetailRepo.getFileName(fileID); logger.info("fileUUID for fileID " + obj.getInt("fileID") + " is " + fileUUID); logger.info("openkmDocUrl is " + openkmDocUrl); @@ -599,7 +601,10 @@ public String getOpenKMDocURL(String requestOBJ, String Authorization) throws Ex } try (InputStream is = conn.getInputStream()) { byte[] fileBytes = is.readAllBytes(); - return Base64.getEncoder().encodeToString(fileBytes); + JSONObject result = new JSONObject(); + result.put("fileContent", Base64.getEncoder().encodeToString(fileBytes)); + result.put("fileName", fileName != null ? fileName : "download"); + return result.toString(); } finally { conn.disconnect(); }