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
156 changes: 156 additions & 0 deletions .github/workflows/admin-service-push-trigger.yml
Original file line number Diff line number Diff line change
@@ -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 "<settings> <servers> <server> <id>ossrh</id> <username>${{secrets.ossrh_user}}</username> <password>${{secrets.ossrh_secret}}</password> </server> </servers> <profiles> <profile> <id>ossrh</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <gpg.executable>gpg2</gpg.executable> <gpg.passphrase>${{secrets.gpg_secret}}</gpg.passphrase> </properties> </profile> <profile> <id>allow-snapshots</id> <activation><activeByDefault>true</activeByDefault></activation> <repositories> <repository> <id>snapshots-repo</id> <url>https://oss.sonatype.org/content/repositories/snapshots</url> <releases><enabled>false</enabled></releases> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>releases-repo</id> <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url> <releases><enabled>true</enabled></releases> <snapshots><enabled>false</enabled></snapshots> </repository> </repositories> </profile> <profile> <id>sonar</id> <properties> <sonar.sources>.</sonar.sources> <sonar.host.url>https://sonarcloud.io</sonar.host.url> </properties> <activation> <activeByDefault>false</activeByDefault> </activation> </profile> </profiles> </settings>" > $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 }}
8 changes: 8 additions & 0 deletions admin/admin-service/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,14 @@
<artifactId>kernel-cbeffutil-api</artifactId>
<version>${mosip.biometric.util.version}</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.15.4</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>io.mosip.biometric.util</groupId>
<artifactId>biometrics-util</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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}")
Expand Down Expand Up @@ -107,7 +108,6 @@ private void createLostRidRequest(SearchInfo searchInfoRequest) {
sortInfos.add(sortInfo);
searchInfoRequest.setSort(sortInfos);
}

}

public String getApplicantPhoto(byte[] isodata) throws Exception {
Expand All @@ -133,6 +133,7 @@ public LostRidDetailsDto getLostRidDetails(String rid) {
fieldDtosRequestWrapper.setRequest(fieldDtos);
ResponseWrapper<SearchFieldDtos> 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)) {
Expand Down Expand Up @@ -170,7 +171,11 @@ private void getApplicantPhoto(String rid, Map<String, String> 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<List<Integer>>() {}));
convertRequestDto.setInputBytes(inputBytes);
byte[] data = FaceDecoder.convertFaceISOToImageBytes(convertRequestDto);
String encodedBytes = StringUtils.newStringUtf8(Base64.encodeBase64(data, false));
String imageData = "data:image/png;base64," + encodedBytes;
Expand All @@ -189,6 +194,14 @@ private void getApplicantPhoto(String rid, Map<String, String> lostRidDataMap){
}


private byte[] convertIntListToBytes(List<Integer> 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<String> modalities=new ArrayList<>();
biometricRequestDto.setSource(SOURCE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

}
Loading