diff --git a/.github/workflows/admin-service-push-trigger.yml b/.github/workflows/admin-service-push-trigger.yml
new file mode 100644
index 00000000000..f028c09a8d5
--- /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 }}
diff --git a/admin/admin-service/pom.xml b/admin/admin-service/pom.xml
index ef1b6bbd4e5..93dd9c0ee09 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 c60b5e0c340..9dd24612657 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);
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 da7b69c228b..7711ea1b2dc 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 ba2640912bd..b782c92fa8f 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());
+ }
}