From 0b5ee9ddd20aa2673bcb0d2cd88efd75c3159166 Mon Sep 17 00:00:00 2001 From: Vishal05-dev Date: Tue, 19 May 2026 14:13:02 +0530 Subject: [PATCH 1/3] fixed Lost RID Image issue --- admin/admin-service/pom.xml | 8 ++++++++ .../admin/service/impl/AdminServiceImpl.java | 19 ++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/admin/admin-service/pom.xml b/admin/admin-service/pom.xml index ef1b6bbd4e..93dd9c0ee0 100644 --- a/admin/admin-service/pom.xml +++ b/admin/admin-service/pom.xml @@ -198,6 +198,14 @@ kernel-cbeffutil-api ${mosip.biometric.util.version} + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.15.4 + test + + io.mosip.biometric.util biometrics-util diff --git a/admin/admin-service/src/main/java/io/mosip/admin/service/impl/AdminServiceImpl.java b/admin/admin-service/src/main/java/io/mosip/admin/service/impl/AdminServiceImpl.java index c60b5e0c34..9dd2461265 100644 --- a/admin/admin-service/src/main/java/io/mosip/admin/service/impl/AdminServiceImpl.java +++ b/admin/admin-service/src/main/java/io/mosip/admin/service/impl/AdminServiceImpl.java @@ -20,6 +20,7 @@ import org.springframework.http.MediaType; import org.springframework.stereotype.Service; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import io.mosip.admin.constant.LostRidErrorCode; @@ -39,7 +40,7 @@ public class AdminServiceImpl implements AdminService { @Value("${mosip.registration.processor.lostrid.id:mosip.registration.lostrid}") private String lostRidRequestId; - @Value("${mosip.admin.lostrid.details.fields:fullName,dateOfBirth}") + @Value("${mosip.admin.lostrid.details.fields:firstName,middleName,lastName,dateOfBirth}") private String[] fields; @Value("${mosip.admin.lostrid.details.name.field:fullName}") @@ -107,7 +108,6 @@ private void createLostRidRequest(SearchInfo searchInfoRequest) { sortInfos.add(sortInfo); searchInfoRequest.setSort(sortInfos); } - } public String getApplicantPhoto(byte[] isodata) throws Exception { @@ -133,6 +133,7 @@ public LostRidDetailsDto getLostRidDetails(String rid) { fieldDtosRequestWrapper.setRequest(fieldDtos); ResponseWrapper fieldDtosResponseWrapper = restClient.postApi(ApiName.PACKET_MANAGER_SEARCHFIELDS, MediaType.APPLICATION_JSON, fieldDtosRequestWrapper, ResponseWrapper.class); + fieldResponseDto = objectMapper.readValue(objectMapper.writeValueAsString(fieldDtosResponseWrapper.getResponse()), SearchFieldResponseDto.class); for (String field: fields) { if (fieldResponseDto.getFields().containsKey(field) && field.equalsIgnoreCase(nameField)) { @@ -170,7 +171,11 @@ private void getApplicantPhoto(String rid, Map lostRidDataMap){ JSONArray segements=utility.getJSONArray(responseJsonObj,SEGEMENTS); JSONObject jsonObject=utility.getJSONObjectFromArray(segements,0); convertRequestDto.setVersion("ISO19794_5_2011"); - convertRequestDto.setInputBytes(Base64.decodeBase64((String) jsonObject.get("bdb"))); + Object bdb = jsonObject.get("bdb"); + byte[] inputBytes = (bdb instanceof String) + ? Base64.decodeBase64((String) bdb) + : convertIntListToBytes(objectMapper.convertValue(bdb, new TypeReference>() {})); + convertRequestDto.setInputBytes(inputBytes); byte[] data = FaceDecoder.convertFaceISOToImageBytes(convertRequestDto); String encodedBytes = StringUtils.newStringUtf8(Base64.encodeBase64(data, false)); String imageData = "data:image/png;base64," + encodedBytes; @@ -189,6 +194,14 @@ private void getApplicantPhoto(String rid, Map lostRidDataMap){ } + private byte[] convertIntListToBytes(List intList) { + byte[] bytes = new byte[intList.size()]; + for (int i = 0; i < intList.size(); i++) { + bytes[i] = intList.get(i).byteValue(); + } + return bytes; + } + private void buildBiometricRequestDto(BiometricRequestDto biometricRequestDto, String rid) { List modalities=new ArrayList<>(); biometricRequestDto.setSource(SOURCE); From 121ed8b18b9a122042b992258a9b9b7947fdf2f9 Mon Sep 17 00:00:00 2001 From: Vishal05-dev Date: Tue, 19 May 2026 18:10:24 +0530 Subject: [PATCH 2/3] Updated test case issue --- .../io/mosip/admin/controller/test/AdminControllerTest.java | 6 ++---- .../src/test/java/io/mosip/admin/util/AdminDataUtil.java | 4 ++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/admin/admin-service/src/test/java/io/mosip/admin/controller/test/AdminControllerTest.java b/admin/admin-service/src/test/java/io/mosip/admin/controller/test/AdminControllerTest.java index da7b69c228..7711ea1b2d 100644 --- a/admin/admin-service/src/test/java/io/mosip/admin/controller/test/AdminControllerTest.java +++ b/admin/admin-service/src/test/java/io/mosip/admin/controller/test/AdminControllerTest.java @@ -131,7 +131,7 @@ public void testLostRidSearch_withValidRequest_returnsResults() throws Exception @Test @WithUserDetails(value = "zonal-admin") public void testLostRidDetails_withValidId_returnsDetails() throws Exception { - String str = "{\"id\":null,\"version\":null,\"responsetime\":\"2023-07-19T05:58:54.874Z\",\"metadata\":null,\"response\":{\"fields\":{\"fullName\":\"[ {\\n \\\"language\\\" : \\\"eng\\\",\\n \\\"value\\\" : \\\"test new 2\\\"\\n}, {\\n \\\"language\\\" : \\\"fra\\\",\\n \\\"value\\\" : \\\"test new 2\\\"\\n} ]\",\"dateOfBirth\":\"1995/01/01\"}},\"errors\":[]}"; + String str = "{\"id\":null,\"version\":null,\"responsetime\":\"2023-07-19T05:58:54.874Z\",\"metadata\":null,\"response\":{\"fields\":{\"firstName\":\"[{\\\"language\\\":\\\"eng\\\",\\\"value\\\":\\\"test\\\"}]\",\"lastName\":\"[{\\\"language\\\":\\\"eng\\\",\\\"value\\\":\\\"user\\\"}]\",\"dateOfBirth\":\"1995/01/01\"}},\"errors\":[]}"; String biometricResponse = new String(Files.readAllBytes(Paths.get(getClass().getResource("/biometricApiResponse.json").toURI())), StandardCharsets.UTF_8); mockRestServiceServer.expect(requestTo(searchFieldsUrl)) @@ -140,11 +140,9 @@ public void testLostRidDetails_withValidId_returnsDetails() throws Exception { mockRestServiceServer.expect(requestTo(biometricUrl)) .andRespond(withSuccess().body(biometricResponse).contentType(MediaType.APPLICATION_JSON)); - AdminDataUtil.checkErrorResponse( + AdminDataUtil.checkSuccessResponse( (mockMvc.perform(MockMvcRequestBuilders.get("/lostRid/details/"+"10002100800001020230223050340")).andReturn()), null); - - } @Test diff --git a/admin/admin-service/src/test/java/io/mosip/admin/util/AdminDataUtil.java b/admin/admin-service/src/test/java/io/mosip/admin/util/AdminDataUtil.java index ba2640912b..b782c92fa8 100644 --- a/admin/admin-service/src/test/java/io/mosip/admin/util/AdminDataUtil.java +++ b/admin/admin-service/src/test/java/io/mosip/admin/util/AdminDataUtil.java @@ -39,5 +39,9 @@ private static String getErrorCode(Map map){ public static void checkErrorResponse(MvcResult rst, String s) { assertEquals(rst.getResponse().getStatus(), 500); } + + public static void checkSuccessResponse(MvcResult rst, String s) { + assertEquals(200, rst.getResponse().getStatus()); + } } From 4b1d363567b33f6f34f0393fbcbde2007a65cf46 Mon Sep 17 00:00:00 2001 From: Vishal05-dev Date: Tue, 19 May 2026 18:21:09 +0530 Subject: [PATCH 3/3] Workflow file added --- .../workflows/admin-service-push-trigger.yml | 156 ++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 .github/workflows/admin-service-push-trigger.yml diff --git a/.github/workflows/admin-service-push-trigger.yml b/.github/workflows/admin-service-push-trigger.yml new file mode 100644 index 0000000000..f028c09a8d --- /dev/null +++ b/.github/workflows/admin-service-push-trigger.yml @@ -0,0 +1,156 @@ +name: admin service push trigger + +on: + release: + types: [published] + pull_request: + types: [opened, reopened, synchronize] + workflow_dispatch: + inputs: + message: + description: 'Message for manually triggering' + required: false + default: 'Triggered for Updates' + type: string + push: + branches: + - '!release-branch' + - release-1* + - '!master' + - 1.* + - develop* + - MOSIP* + - dst-* + - mec-* + +jobs: + build-maven-admin-services: + uses: iiitb-pilot/kattu/.github/workflows/maven-build.yml@master-java21 + with: + SERVICE_LOCATION: ./admin + BUILD_ARTIFACT: admin + secrets: + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + build-dockers: + needs: build-maven-admin-services + strategy: + matrix: + include: + - SERVICE_LOCATION: 'admin/admin-service' + SERVICE_NAME: 'admin-service' + BUILD_ARTIFACT: 'admin' + - SERVICE_LOCATION: 'admin/hotlist-service' + SERVICE_NAME: 'hotlist-service' + BUILD_ARTIFACT: 'admin' + - SERVICE_LOCATION: 'admin/kernel-masterdata-service' + SERVICE_NAME: 'kernel-masterdata-service' + BUILD_ARTIFACT: 'admin' + - SERVICE_LOCATION: 'admin/kernel-syncdata-service' + SERVICE_NAME: 'kernel-syncdata-service' + BUILD_ARTIFACT: 'admin' + fail-fast: false + name: ${{ matrix.SERVICE_NAME }} + uses: iiitb-pilot/kattu/.github/workflows/maven-build.yml@master-java21 + with: + SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} + SERVICE_NAME: ${{ matrix.SERVICE_NAME }} + BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + secrets: + DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} + ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} + RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + + build-maven-apitest-masterdata: + uses: mosip/kattu/.github/workflows/maven-build.yml@master-java21 + with: + SERVICE_LOCATION: ./api-test + BUILD_ARTIFACT: apitest-masterdata + secrets: + OSSRH_USER: ${{ secrets.OSSRH_USER }} + OSSRH_SECRET: ${{ secrets.OSSRH_SECRET }} + OSSRH_TOKEN: ${{ secrets.OSSRH_TOKEN }} + GPG_SECRET: ${{ secrets.GPG_SECRET }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + + + build-apitest-masterdata-local: + needs: build-maven-apitest-masterdata + runs-on: ubuntu-latest + env: + NAMESPACE: ${{ secrets.dev_namespace_docker_hub }} + SERVICE_NAME: apitest-masterdata + SERVICE_LOCATION: api-test + BUILD_ARTIFACT: apitest-masterdata-local + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 21 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: 21 + server-id: ossrh # Value of the distributionManagement/repository/id field of the pom.xml + settings-path: ${{ github.workspace }} # location for the settings.xml file + + - name: Setup the settings file for ossrh server + run: echo " ossrh ${{secrets.ossrh_user}} ${{secrets.ossrh_secret}} ossrh true gpg2 ${{secrets.gpg_secret}} allow-snapshots true snapshots-repo https://oss.sonatype.org/content/repositories/snapshots false true releases-repo https://oss.sonatype.org/service/local/staging/deploy/maven2 true false sonar . https://sonarcloud.io false " > $GITHUB_WORKSPACE/settings.xml + + - name: Build Automationtests with Maven + run: | + cd ${{ env.SERVICE_LOCATION}} + mvn clean package -s $GITHUB_WORKSPACE/settings.xml + + - name: Copy configuration files to target directory. + run: | + cp -r ${{ env.SERVICE_LOCATION}}/target/classes/config ${{ env.SERVICE_LOCATION}}/target/config + cp -r ${{ env.SERVICE_LOCATION}}/testNgXmlFiles ${{ env.SERVICE_LOCATION}}/target/testNgXmlFiles + + - name: Ready the springboot artifacts + if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + run: | + ## FIND JARS & COPY ONLY EXECUTABLE JARs STORED UNDER TARGET DIRECTORY + find ${{ env.SERVICE_LOCATION }} -path '*/target/*' -exec zip ${{ env.BUILD_ARTIFACT }}.zip {} + + + - name: Upload the springboot jars + if: ${{ !contains(github.ref, 'master') || !contains(github.ref, 'main') }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.BUILD_ARTIFACT }} + path: ${{ env.BUILD_ARTIFACT }}.zip + + - uses: 8398a7/action-slack@v3 + with: + status: ${{ job.status }} + fields: repo,message,author,commit,workflow,job # selectable (default: repo,message) + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # required + if: failure() # Pick up events even if the job fails or is canceled. + + build-dockers_apitest_masterdata: + needs: build-apitest-masterdata-local + strategy: + matrix: + include: + - SERVICE_LOCATION: 'api-test' + SERVICE_NAME: 'apitest-masterdata' + BUILD_ARTIFACT: 'apitest-masterdata-local' + ONLY_DOCKER: true + fail-fast: false + name: ${{ matrix.SERVICE_NAME }} + uses: iiitb-pilot/kattu/.github/workflows/docker-build.yml@master-java21 + with: + SERVICE_LOCATION: ${{ matrix.SERVICE_LOCATION }} + SERVICE_NAME: ${{ matrix.SERVICE_NAME }} + BUILD_ARTIFACT: ${{ matrix.BUILD_ARTIFACT }} + ONLY_DOCKER: ${{ matrix.ONLY_DOCKER }} + secrets: + DEV_NAMESPACE_DOCKER_HUB: ${{ secrets.DEV_NAMESPACE_DOCKER_HUB }} + ACTOR_DOCKER_HUB: ${{ secrets.ACTOR_DOCKER_HUB }} + RELEASE_DOCKER_HUB: ${{ secrets.RELEASE_DOCKER_HUB }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}