diff --git a/kernel/kernel-otpmanager-service/pom.xml b/kernel/kernel-otpmanager-service/pom.xml
index dd15b28b..8878d959 100644
--- a/kernel/kernel-otpmanager-service/pom.xml
+++ b/kernel/kernel-otpmanager-service/pom.xml
@@ -231,58 +231,6 @@
https://github.com/mosip/commons
-
- io.mosip.kernel
- kernel-core
- ${kernel.core.version}
-
-
-
- org.springframework.boot
- spring-boot-starter-security
- ${spring.boot.version}
-
-
- org.springframework.security
- spring-security-test
- ${spring.security.test.version}
-
-
- io.mosip.kernel
- kernel-dataaccess-hibernate
- ${kernel.dataaccess-hibernate.version}
-
-
- org.postgresql
- postgresql
- ${postgresql.version}
-
-
- io.mosip.kernel
- kernel-logger-logback
- ${kernel.logger.version}
-
-
- org.springdoc
- springdoc-openapi-ui
- ${springdoc.version}
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
- true
- ${spring.boot.version}
-
com.googlecode.json-simple
json-simple
@@ -294,6 +242,11 @@
+
+ io.mosip.kernel
+ kernel-otpmanager
+ 1.2.1-SNAPSHOT
+
@@ -497,7 +450,7 @@
io.mosip.kernel
kernel-auth-adapter
- ${project.version}
+ ${kernel.auth-adapter.version}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/OtpmanagerBootApplication.java b/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/OtpmanagerBootApplication.java
index 738ebd24..6855ef15 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/OtpmanagerBootApplication.java
+++ b/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/OtpmanagerBootApplication.java
@@ -2,6 +2,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
/**
* OTP Manager Application
@@ -13,6 +14,7 @@
*/
@SpringBootApplication(scanBasePackages = { "io.mosip.kernel.otpmanager.*", "${mosip.auth.adapter.impl.basepackage}",
"io.mosip.kernel.core.logger.config" })
+@EnableCaching
public class OtpmanagerBootApplication {
/**
diff --git a/kernel/kernel-otpmanager-service/src/main/resources/application-local.properties b/kernel/kernel-otpmanager-service/src/main/resources/application-local.properties
index 36b3b5ff..c7594952 100644
--- a/kernel/kernel-otpmanager-service/src/main/resources/application-local.properties
+++ b/kernel/kernel-otpmanager-service/src/main/resources/application-local.properties
@@ -25,6 +25,15 @@ auth.header.name=Authorization
spring.h2.console.enabled=true
+mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter
+mosip.kernel.auth.appids.realm.map={prereg:'preregistration',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip'}
+mosip.kernel.auth.proxy-otp=false
+
+#set the datastore
+mosip.datastore.type=cache
+mosip.datastore.cache.name=otpEntity
+
+
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.jdbc.lob.non_contextual_creation=true
diff --git a/kernel/kernel-otpmanager-service/src/main/resources/bootstrap.properties b/kernel/kernel-otpmanager-service/src/main/resources/bootstrap.properties
index f3ac9152..0934450a 100644
--- a/kernel/kernel-otpmanager-service/src/main/resources/bootstrap.properties
+++ b/kernel/kernel-otpmanager-service/src/main/resources/bootstrap.properties
@@ -34,3 +34,5 @@ openapi.service.servers[0].description=OTP Manager Service
springdoc.swagger-ui.disable-swagger-default-url=true
spring.mvc.servlet.path=${server.servlet.path}
+server.servlet.context-path=/v1/otpmanager
+
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpGeneratorControllerTest.java b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpGeneratorControllerTest.java
index 7eca43e1..87e0dc36 100644
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpGeneratorControllerTest.java
+++ b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpGeneratorControllerTest.java
@@ -1,47 +1,39 @@
package io.mosip.kernel.otpmanager.test.controller;
-import static org.hamcrest.CoreMatchers.is;
-import static org.mockito.BDDMockito.given;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
+import io.mosip.kernel.core.http.RequestWrapper;
+import io.mosip.kernel.core.http.ResponseWrapper;
+import io.mosip.kernel.otpmanager.controller.OtpGeneratorController;
+import io.mosip.kernel.otpmanager.dto.OtpGeneratorRequestDto;
+import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
import org.mockito.Mockito;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.MediaType;
-import org.springframework.security.test.context.support.WithUserDetails;
import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-
import io.mosip.kernel.otpmanager.dto.OtpGeneratorResponseDto;
import io.mosip.kernel.otpmanager.service.impl.OtpGeneratorServiceImpl;
-import io.mosip.kernel.otpmanager.test.OtpmanagerTestBootApplication;
@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(classes = OtpmanagerTestBootApplication.class)
public class OtpGeneratorControllerTest {
- @Autowired
- private MockMvc mockMvc;
- @MockBean
+ @Mock
private OtpGeneratorServiceImpl service;
- @WithUserDetails("individual")
+ @InjectMocks
+ private OtpGeneratorController otpGeneratorController;
+
@Test
public void testOtpGenerationController() throws Exception {
- String otp = "3214";
OtpGeneratorResponseDto dto = new OtpGeneratorResponseDto();
- dto.setOtp(otp);
- given(service.getOtp(Mockito.any())).willReturn(dto);
- String json = "{\"key\":\"123456789\"}";
- mockMvc.perform(post("/otp/generate").contentType(MediaType.APPLICATION_JSON).content(json))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.otp", is("3214")));
- }
+ dto.setOtp("3124");
+ Mockito.when(service.getOtp(Mockito.any())).thenReturn(dto);
+ OtpGeneratorRequestDto requestDto = new OtpGeneratorRequestDto();
+ RequestWrapper requestWrapper = new RequestWrapper();
+ requestWrapper.setRequest(requestDto);
+ OtpGeneratorResponseDto responseDto = new OtpGeneratorResponseDto();
+ responseDto.setOtp("3124");
+ ResponseWrapper actualResponseWrapper = otpGeneratorController.generateOtp(requestWrapper);
+ Assert.assertEquals(responseDto, actualResponseWrapper.getResponse()); }
}
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpValidatorControllerTest.java b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpValidatorControllerTest.java
index dcd8c177..ee334e7d 100644
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpValidatorControllerTest.java
+++ b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/controller/OtpValidatorControllerTest.java
@@ -19,9 +19,7 @@
import io.mosip.kernel.otpmanager.service.impl.OtpValidatorServiceImpl;
import io.mosip.kernel.otpmanager.test.OtpmanagerTestBootApplication;
-@SpringBootTest(classes = OtpmanagerTestBootApplication.class)
@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
public class OtpValidatorControllerTest {
@Mock
private OtpValidatorServiceImpl service;
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/exception/OtpExceptionTest.java b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/exception/OtpExceptionTest.java
deleted file mode 100644
index 0106da7c..00000000
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/exception/OtpExceptionTest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-
-package io.mosip.kernel.otpmanager.test.exception;
-
-import static org.mockito.Mockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mockito;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.MediaType;
-import org.springframework.security.test.context.support.WithUserDetails;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import io.mosip.kernel.core.exception.ServiceError;
-import io.mosip.kernel.core.http.RequestWrapper;
-import io.mosip.kernel.otpmanager.constant.OtpErrorConstants;
-import io.mosip.kernel.otpmanager.dto.OtpGeneratorRequestDto;
-import io.mosip.kernel.otpmanager.exception.OtpInvalidArgumentException;
-import io.mosip.kernel.otpmanager.service.impl.OtpGeneratorServiceImpl;
-import io.mosip.kernel.otpmanager.service.impl.OtpValidatorServiceImpl;
-import io.mosip.kernel.otpmanager.test.OtpmanagerTestBootApplication;
-
-@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(classes = OtpmanagerTestBootApplication.class)
-public class OtpExceptionTest {
- @Autowired
- private MockMvc mockMvc;
-
- @Autowired
- private ObjectMapper objectMapper;
-
- @MockBean
- private OtpGeneratorServiceImpl service;
-
- @MockBean
- private OtpValidatorServiceImpl validatorService;
-
- @WithUserDetails("individual")
- @Test
- public void testForExceptionWhenKeyIsNull() throws Exception {
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(new ServiceError(OtpErrorConstants.OTP_VAL_INVALID_KEY_INPUT.getErrorCode(),
- OtpErrorConstants.OTP_VAL_INVALID_KEY_INPUT.getErrorMessage()));
- when(service.getOtp(Mockito.any())).thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- OtpGeneratorRequestDto otpGeneratorRequestDto = new OtpGeneratorRequestDto();
- otpGeneratorRequestDto.setKey(null);
- RequestWrapper reqWrapperDTO = new RequestWrapper<>();
- reqWrapperDTO.setId("ID");
- reqWrapperDTO.setMetadata(null);
- reqWrapperDTO.setRequest(otpGeneratorRequestDto);
- reqWrapperDTO.setRequesttime(LocalDateTime.now());
- reqWrapperDTO.setVersion("v1.0");
- String json = objectMapper.writeValueAsString(reqWrapperDTO);
- mockMvc.perform(post("/otp/generate").contentType(MediaType.APPLICATION_JSON).content(json))
- .andExpect(status().isOk());
- }
-
- @WithUserDetails("individual")
- @Test
- public void testForExceptionWhenKeyNotFound() throws Exception {
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(new ServiceError(OtpErrorConstants.OTP_VAL_INVALID_KEY_INPUT.getErrorCode(),
- OtpErrorConstants.OTP_VAL_INVALID_KEY_INPUT.getErrorMessage()));
- when(validatorService.validateOtp(Mockito.any(), Mockito.any()))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(get("/otp/validate?key=test&otp=3212").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk());
- }
-
- @WithUserDetails("individual")
- @Test
- public void testForExceptionWhenKeyLengthInvalid() throws Exception {
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(new ServiceError(OtpErrorConstants.OTP_VAL_INVALID_KEY_INPUT.getErrorCode(),
- OtpErrorConstants.OTP_VAL_INVALID_KEY_INPUT.getErrorMessage()));
- when(validatorService.validateOtp(Mockito.any(), Mockito.any()))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(get("/otp/validate?key=sa&otp=3212").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk());
- }
-
-}
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpGeneratorServiceTest.java b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpGeneratorServiceTest.java
deleted file mode 100644
index e21accd8..00000000
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpGeneratorServiceTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package io.mosip.kernel.otpmanager.test.service;
-
-import static org.mockito.Mockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.time.LocalDateTime;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.MediaType;
-import org.springframework.security.test.context.support.WithUserDetails;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-import io.mosip.kernel.core.http.RequestWrapper;
-import io.mosip.kernel.otpmanager.dto.OtpGeneratorRequestDto;
-import io.mosip.kernel.otpmanager.entity.OtpEntity;
-import io.mosip.kernel.otpmanager.repository.OtpRepository;
-import io.mosip.kernel.otpmanager.test.OtpmanagerTestBootApplication;
-
-@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(classes = OtpmanagerTestBootApplication.class)
-public class OtpGeneratorServiceTest {
-
- @Autowired
- private MockMvc mockMvc;
-
- @Autowired
- private ObjectMapper objectMapper;
-
- @MockBean
- OtpRepository repository;
-
- @WithUserDetails("individual")
- @Test
- public void testOtpGeneratorServicePositiveCase() throws Exception {
- OtpGeneratorRequestDto otpGeneratorRequestDto = new OtpGeneratorRequestDto();
- otpGeneratorRequestDto.setKey("testKey");
- RequestWrapper reqWrapperDTO = new RequestWrapper<>();
- reqWrapperDTO.setId("ID");
- reqWrapperDTO.setMetadata(null);
- reqWrapperDTO.setRequest(otpGeneratorRequestDto);
- reqWrapperDTO.setRequesttime(LocalDateTime.now());
- reqWrapperDTO.setVersion("v1.0");
- String json = objectMapper.writeValueAsString(reqWrapperDTO);
- mockMvc.perform(post("/otp/generate").contentType(MediaType.APPLICATION_JSON).content(json))
- .andExpect(status().isOk()).andReturn();
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpGenerationFreezedCase() throws Exception {
- OtpGeneratorRequestDto otpGeneratorRequestDto = new OtpGeneratorRequestDto();
- otpGeneratorRequestDto.setKey("testKey");
- RequestWrapper reqWrapperDTO = new RequestWrapper<>();
- reqWrapperDTO.setId("ID");
- reqWrapperDTO.setMetadata(null);
- reqWrapperDTO.setRequest(otpGeneratorRequestDto);
- reqWrapperDTO.setRequesttime(LocalDateTime.now());
- reqWrapperDTO.setVersion("v1.0");
- String json = objectMapper.writeValueAsString(reqWrapperDTO);
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId("testKey");
- entity.setValidationRetryCount(0);
- entity.setStatusCode("KEY_FREEZED");
- entity.setUpdatedDtimes(LocalDateTime.now());
- when(repository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(post("/otp/generate").contentType(MediaType.APPLICATION_JSON).content(json))
- .andExpect(status().isOk()).andReturn();
- }
-}
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidationsTest.java b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidationsTest.java
deleted file mode 100644
index e05e2008..00000000
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidationsTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package io.mosip.kernel.otpmanager.test.service;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.mockito.Mockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-import org.junit.Ignore;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.MediaType;
-import org.springframework.security.test.context.support.WithUserDetails;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-
-import io.mosip.kernel.core.exception.ServiceError;
-import io.mosip.kernel.otpmanager.entity.OtpEntity;
-import io.mosip.kernel.otpmanager.exception.OtpInvalidArgumentException;
-import io.mosip.kernel.otpmanager.repository.OtpRepository;
-import io.mosip.kernel.otpmanager.test.OtpmanagerTestBootApplication;
-
-@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(classes = OtpmanagerTestBootApplication.class)
-public class OtpValidationsTest {
-
- @Autowired
- MockMvc mockMvc;
-
- @Value("${mosip.kernel.otp.default-length}")
- double otpLength;
-
- @MockBean
- private OtpRepository otpRepository;
-
- @WithUserDetails("individual")
- @Test
- public void testNullKey() throws Exception {
- when(otpRepository.findById(OtpEntity.class, "testKey")).thenReturn(null);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=1234").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andReturn();
- }
-
- @WithUserDetails("individual")
- @Ignore
- @Test
- public void testOtpValidatorServiceExpiredOTPCase() throws Exception {
- Random randomKey = new Random();
- double id = Math.pow(10, otpLength) + randomKey.nextInt((int) (9 * Math.pow(10, otpLength)));
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId(Double.toString(id));
- entity.setValidationRetryCount(0);
- entity.setStatusCode("OTP_UNUSED");
- entity.setGeneratedDtimes(LocalDateTime.now(ZoneId.of("UTC")).minusMinutes(3));
- when(otpRepository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=1234").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.status", is("failure")));
-
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceKeyEmptyCase() throws Exception {
- ServiceError serviceError = new ServiceError("TESTCODE", "TESTMESSAGE");
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(serviceError);
- when(otpRepository.findById(OtpEntity.class, "testKey"))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(get("/otp/validate?key=&otp=1234").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andReturn();
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceOtpEmptyCase() throws Exception {
- ServiceError serviceError = new ServiceError("TESTCODE", "TESTMESSAGE");
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(serviceError);
- when(otpRepository.findById(OtpEntity.class, "testKey"))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(get("/otp/validate?key=testkey&otp=").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andReturn();
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceKeyLengthLessThanRequiredCase() throws Exception {
- ServiceError serviceError = new ServiceError("TESTCODE", "TESTMESSAGE");
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(serviceError);
- when(otpRepository.findById(OtpEntity.class, "testKey"))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(
- get("/otp/validate").param("key", "sa").param("otp", "123456").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andReturn();
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceKeyLengthMoreThanRequiredCase() throws Exception {
- ServiceError serviceError = new ServiceError("TESTCODE", "TESTMESSAGE");
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(serviceError);
- when(otpRepository.findById(OtpEntity.class, "testKey"))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(get("/otp/validate").param("key",
- "ykbbgyhogsmziqozetsyexoazpqhcpqywqmuyyijaweoswjlvhemamrmbuorixvnwlrhgfbnrmoorscjkllmgzqxtauoolvhoiyxfwoiotkvimcqshxvxplrqsfxmlmroyxcphstayxnowmjsnwdwhazpotqqrafuvpcaccaxneavptzwwsukhjqzwhjpdgrbqfybsyyryqlbrpdakuvtvswcwpzvkkaonblwlkjvytiodlnvsodsxkkgbbzvxkjbgbhnnvpkohydywdaudekflgbvbkeqwrekdgsneomyovczvnqhuitmr")
- .param("otp", "123456").contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn();
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceOtpIsCharacter() throws Exception {
- ServiceError serviceError = new ServiceError("TESTCODE", "TESTMESSAGE");
- List validationErrorsList = new ArrayList<>();
- validationErrorsList.add(serviceError);
- when(otpRepository.findById(OtpEntity.class, "testKey"))
- .thenThrow(new OtpInvalidArgumentException(validationErrorsList));
- mockMvc.perform(get("/otp/validate").param("key", "test").param("otp", "INVALID-TYPE")
- .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn();
- }
-}
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidatorServiceTest.java b/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidatorServiceTest.java
deleted file mode 100644
index 1bc1ad44..00000000
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidatorServiceTest.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package io.mosip.kernel.otpmanager.test.service;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.mockito.Mockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.temporal.ChronoUnit;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.MediaType;
-import org.springframework.security.test.context.support.WithUserDetails;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-
-import io.mosip.kernel.otpmanager.entity.OtpEntity;
-import io.mosip.kernel.otpmanager.repository.OtpRepository;
-import io.mosip.kernel.otpmanager.test.OtpmanagerTestBootApplication;
-
-@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(classes = OtpmanagerTestBootApplication.class)
-public class OtpValidatorServiceTest {
-
- @Autowired
- private MockMvc mockMvc;
-
- @MockBean
- OtpRepository repository;
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServicePositiveCase() throws Exception {
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId("testKey");
- entity.setValidationRetryCount(0);
- entity.setStatusCode("OTP_UNUSED");
- entity.setUpdatedDtimes(LocalDateTime.now(ZoneId.of("UTC")).plusSeconds(50));
- when(repository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=1234").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.status", is("success")));
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceNegativeCase() throws Exception {
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId("testKey");
- entity.setValidationRetryCount(0);
- entity.setStatusCode("OTP_UNUSED");
- entity.setUpdatedDtimes(LocalDateTime.now());
- when(repository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=5431").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.status", is("failure")));
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceWhenMaxAttemptReached() throws Exception {
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId("testKey");
- entity.setValidationRetryCount(3);
- entity.setStatusCode("OTP_UNUSED");
- entity.setUpdatedDtimes(LocalDateTime.now());
- when(repository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=5431").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.status", is("failure")));
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceWhenKeyFreezedPositiveCase() throws Exception {
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId("testKey");
- entity.setValidationRetryCount(3);
- entity.setStatusCode("KEY_FREEZED");
- entity.setUpdatedDtimes(LocalDateTime.now(ZoneId.of("UTC")).minus(1, ChronoUnit.MINUTES));
- when(repository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=2345").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.status", is("failure")));
- }
-
- @WithUserDetails("individual")
- @Test
- public void testOtpValidatorServiceWhenKeyFreezedNegativeCase() throws Exception {
- OtpEntity entity = new OtpEntity();
- entity.setOtp("1234");
- entity.setId("testKey");
- entity.setValidationRetryCount(0);
- entity.setStatusCode("KEY_FREEZED");
- entity.setUpdatedDtimes(LocalDateTime.now().minus(20, ChronoUnit.SECONDS));
- when(repository.findById(OtpEntity.class, "testKey")).thenReturn(entity);
- mockMvc.perform(get("/otp/validate?key=testKey&otp=1234").contentType(MediaType.APPLICATION_JSON))
- .andExpect(status().isOk()).andExpect(jsonPath("$.response.status", is("failure")));
- }
-
-}
diff --git a/kernel/kernel-otpmanager/pom.xml b/kernel/kernel-otpmanager/pom.xml
new file mode 100644
index 00000000..5c8af872
--- /dev/null
+++ b/kernel/kernel-otpmanager/pom.xml
@@ -0,0 +1,328 @@
+
+
+ 4.0.0
+
+ io.mosip.kernel
+ kernel-otpmanager
+ 1.2.1-SNAPSHOT
+
+ UTF-8
+
+
+ 11
+ 11
+ 3.8.0
+
+
+ 3.0.2
+ 3.1.0
+
+
+ 3.2.0
+ 2.3
+
+
+ 2.0.2.RELEASE
+ 2.0.7.RELEASE
+ 5.0.5.RELEASE
+ 2.0.4.RELEASE
+
+
+ 2.0.7
+ 1.5.21
+ 2.9.2
+
+
+ 3.6.2
+ 3.7.0
+
+
+
+ 1.2
+ 3.0.0
+ 1.3
+ 2.2
+ 2.0.1.Final
+ 2.2.6
+
+
+ 1.4.197
+ 5.1.46
+ 42.2.2
+ 2.5.0
+ 5.2.17.Final
+ 6.0.12.Final
+
+
+ 4.12
+ 2.23.4
+ 1.7.4
+ 2.0.7
+
+
+ 1.2.3
+ 1.7.19
+ 1.7.7
+ 1.7.25
+
+
+ 2.9.5
+ 2.9.8
+ 2.9.6
+ 20180130
+ 2.2.10
+ 20180813
+ 1.1.1
+
+
+ 3.6.1
+ 3.7
+ 2.6
+ 1.11
+ 4.3
+ 1.9.2
+ 2.2
+ 4.5.6
+ 19.0
+ 1.18.8
+ 0.1.54
+ 1.4.0
+ 7.1.0
+ 2.0.0
+ 5.5.13
+ 2.3.23
+ 1.7
+ 2.0
+ 1.5.2
+ 2.1.1
+ 1.66
+ 63.1
+ 1.0.0
+ 3.3.3
+ 3.1.0
+ 4.1.0-incubating
+ 1.11.368
+ 0.2.4
+ 2.3.0
+ 3.0.1
+ 1.9.12
+ 0.6.0
+ 2.0.0.AM2
+ 1.8.12
+ 1.4.2
+ 1.4.2
+ UTF-8
+
+
+ 11
+ 11
+ 3.8.0
+
+
+ 3.0.2
+ 3.1.0
+
+
+ 3.2.0
+ 2.3
+
+
+ 2.0.2.RELEASE
+ 2.0.7.RELEASE
+ 5.0.5.RELEASE
+ 2.0.4.RELEASE
+
+
+ 2.0.7
+ 1.5.21
+ 2.9.2
+
+
+ 3.6.2
+ 3.7.0
+
+
+
+ 1.2
+ 3.0.0
+ 1.3
+ 2.2
+ 2.0.1.Final
+ 2.2.6
+
+
+ 1.4.197
+ 5.1.46
+ 42.2.2
+ 2.5.0
+ 5.2.17.Final
+ 6.0.12.Final
+
+
+ 4.12
+ 2.23.4
+ 1.7.4
+ 2.0.7
+
+
+ 1.2.3
+ 1.7.19
+ 1.7.7
+ 1.7.25
+
+
+ 2.9.5
+ 2.9.8
+ 2.9.6
+ 20180130
+ 2.2.10
+ 20180813
+ 1.1.1
+
+
+ 3.6.1
+ 3.7
+ 2.6
+ 1.11
+ 4.3
+ 1.9.2
+ 2.2
+ 4.5.6
+ 19.0
+ 1.18.8
+ 0.1.54
+ 1.4.0
+ 7.1.0
+ 2.0.0
+ 5.5.13
+ 2.3.23
+ 1.7
+ 2.0
+ 1.5.2
+ 2.1.1
+ 1.66
+ 63.1
+ 1.0.0
+ 3.3.3
+ 3.1.0
+ 4.1.0-incubating
+ 1.11.368
+ 0.2.4
+ 2.3.0
+ 3.0.1
+ 1.9.12
+ 0.6.0
+ 2.0.0.AM2
+ 1.8.12
+ 1.4.2
+ 1.4.2
+ 1.2.1-SNAPSHOT
+ 1.2.1-SNAPSHOT
+ 1.2.1-SNAPSHOT
+ 1.2.1-SNAPSHOT
+ 0.8.5
+ 1.5.10
+
+ kernel-otpmanager
+ Mosip commons project
+ https://github.com/mosip/commons
+
+
+
+ io.mosip.kernel
+ kernel-core
+ ${kernel.core.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+ ${spring.boot.version}
+
+
+ org.springframework.security
+ spring-security-test
+ ${spring.security.test.version}
+
+
+ io.mosip.kernel
+ kernel-dataaccess-hibernate
+ ${kernel.dataaccess-hibernate.version}
+
+
+ org.postgresql
+ postgresql
+ ${postgresql.version}
+
+
+ io.mosip.kernel
+ kernel-logger-logback
+ ${kernel.logger.version}
+
+
+ org.springdoc
+ springdoc-openapi-ui
+ ${springdoc.version}
+
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+ ${spring.boot.version}
+
+
+ com.googlecode.json-simple
+ json-simple
+ 1.1.1
+
+
+ junit
+ junit
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-cache
+ ${spring.boot.version}
+
+
+
+
+
+ ossrh
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+ ossrh
+ https://oss.sonatype.org/service/local/staging/deploy/maven2/
+
+
+
+ scm:git:git://github.com/mosip/commons.git
+ scm:git:ssh://github.com:mosip/commons.git
+ https://github.com/mosip/commons
+ HEAD
+
+
+
+ MPL 2.0
+ https://www.mozilla.org/en-US/MPL/2.0/
+
+
+
+
+ Mosip
+ mosip.emailnotifier@gmail.com
+ io.mosip
+ https://github.com/mosip/commons
+
+
+
diff --git a/kernel/kernel-otpmanager/src/main/java/META-INF/MANIFEST.MF b/kernel/kernel-otpmanager/src/main/java/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..254272e1
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/java/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/constant/OtpErrorConstants.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/constant/OtpErrorConstants.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/constant/OtpErrorConstants.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/constant/OtpErrorConstants.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/constant/OtpStatusConstants.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/constant/OtpStatusConstants.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/constant/OtpStatusConstants.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/constant/OtpStatusConstants.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/constant/SqlQueryConstants.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/constant/SqlQueryConstants.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/constant/SqlQueryConstants.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/constant/SqlQueryConstants.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/AuthorizedRolesDto.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/AuthorizedRolesDto.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/AuthorizedRolesDto.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/AuthorizedRolesDto.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/GenerationDTOValidationLevels.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/GenerationDTOValidationLevels.java
similarity index 95%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/GenerationDTOValidationLevels.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/GenerationDTOValidationLevels.java
index 439b4dec..a5eb1b83 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/GenerationDTOValidationLevels.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/GenerationDTOValidationLevels.java
@@ -1,23 +1,23 @@
-package io.mosip.kernel.otpmanager.dto;
-
-import javax.validation.GroupSequence;
-
-/**
- * This class contains group sequence levels for validation of key.
- *
- * @author Sagar Mahapatra
- * @author Ritesh Sinha
- * @since 1.0.0
- */
-public class GenerationDTOValidationLevels {
- @GroupSequence({ NullEmptyValidationLevel.class, InvalidLengthValidationLevel.class })
- public interface ValidationLevel {
-
- }
-
- public interface NullEmptyValidationLevel {
- }
-
- public interface InvalidLengthValidationLevel {
- }
-}
+package io.mosip.kernel.otpmanager.dto;
+
+import javax.validation.GroupSequence;
+
+/**
+ * This class contains group sequence levels for validation of key.
+ *
+ * @author Sagar Mahapatra
+ * @author Ritesh Sinha
+ * @since 1.0.0
+ */
+public class GenerationDTOValidationLevels {
+ @GroupSequence({ NullEmptyValidationLevel.class, InvalidLengthValidationLevel.class })
+ public interface ValidationLevel {
+
+ }
+
+ public interface NullEmptyValidationLevel {
+ }
+
+ public interface InvalidLengthValidationLevel {
+ }
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorRequestDto.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorRequestDto.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorRequestDto.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorRequestDto.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorResponseDto.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorResponseDto.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorResponseDto.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/OtpGeneratorResponseDto.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/OtpValidatorResponseDto.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/OtpValidatorResponseDto.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/dto/OtpValidatorResponseDto.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/dto/OtpValidatorResponseDto.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/entity/OtpEntity.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/entity/OtpEntity.java
similarity index 96%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/entity/OtpEntity.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/entity/OtpEntity.java
index 08fb624c..f78e6bb3 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/entity/OtpEntity.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/entity/OtpEntity.java
@@ -1,5 +1,6 @@
package io.mosip.kernel.otpmanager.entity;
+import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -22,7 +23,7 @@
@Entity
@Data
@Table(name = "otp_transaction", schema = "kernel")
-public class OtpEntity {
+public class OtpEntity implements Serializable {
/**
* The variable that holds the unique ID.
*/
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/CryptoFailureException.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/CryptoFailureException.java
similarity index 96%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/CryptoFailureException.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/CryptoFailureException.java
index 9c4373ae..9e09a6c5 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/CryptoFailureException.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/CryptoFailureException.java
@@ -1,30 +1,30 @@
-package io.mosip.kernel.otpmanager.exception;
-
-import io.mosip.kernel.core.exception.BaseUncheckedException;
-
-/**
- * Class to handle exceptions for CRYPTO failure.
- *
- * @author Ritesh Sinha
- * @since 1.0.0
- *
- */
-public class CryptoFailureException extends BaseUncheckedException {
-
- /**
- * Serializable version ID.
- */
- private static final long serialVersionUID = -3069970234745966967L;
-
- /**
- * Constructor for CryptoFailureException class.
- *
- * @param errorCode the error code.
- * @param errorMessage the error message.
- * @param rootCause the cause.
- */
- public CryptoFailureException(String errorCode, String errorMessage, Throwable rootCause) {
- super(errorCode, errorMessage, rootCause);
- }
-
-}
+package io.mosip.kernel.otpmanager.exception;
+
+import io.mosip.kernel.core.exception.BaseUncheckedException;
+
+/**
+ * Class to handle exceptions for CRYPTO failure.
+ *
+ * @author Ritesh Sinha
+ * @since 1.0.0
+ *
+ */
+public class CryptoFailureException extends BaseUncheckedException {
+
+ /**
+ * Serializable version ID.
+ */
+ private static final long serialVersionUID = -3069970234745966967L;
+
+ /**
+ * Constructor for CryptoFailureException class.
+ *
+ * @param errorCode the error code.
+ * @param errorMessage the error message.
+ * @param rootCause the cause.
+ */
+ public CryptoFailureException(String errorCode, String errorMessage, Throwable rootCause) {
+ super(errorCode, errorMessage, rootCause);
+ }
+
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpControllerAdvice.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpControllerAdvice.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpControllerAdvice.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpControllerAdvice.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpIOException.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpIOException.java
similarity index 95%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpIOException.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpIOException.java
index 8953ad76..1597bbd8 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpIOException.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpIOException.java
@@ -1,29 +1,29 @@
-package io.mosip.kernel.otpmanager.exception;
-
-import io.mosip.kernel.core.exception.BaseUncheckedException;
-
-/**
- * Exception class for Otp IO exception.
- *
- * @author Ritesh Sinha
- * @since 1.0.0
- */
-public class OtpIOException extends BaseUncheckedException {
-
- /**
- *
- */
- private static final long serialVersionUID = -8462152397501555128L;
-
- /**
- * Constructor for OtpIOException.
- *
- * @param errorCode the error code.
- * @param errorMessage the error message.
- * @param rootCause the root cause.
- */
- public OtpIOException(String errorCode, String errorMessage, Throwable rootCause) {
- super(errorCode, errorMessage, rootCause);
- }
-
-}
+package io.mosip.kernel.otpmanager.exception;
+
+import io.mosip.kernel.core.exception.BaseUncheckedException;
+
+/**
+ * Exception class for Otp IO exception.
+ *
+ * @author Ritesh Sinha
+ * @since 1.0.0
+ */
+public class OtpIOException extends BaseUncheckedException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -8462152397501555128L;
+
+ /**
+ * Constructor for OtpIOException.
+ *
+ * @param errorCode the error code.
+ * @param errorMessage the error message.
+ * @param rootCause the root cause.
+ */
+ public OtpIOException(String errorCode, String errorMessage, Throwable rootCause) {
+ super(errorCode, errorMessage, rootCause);
+ }
+
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpInvalidArgumentException.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpInvalidArgumentException.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpInvalidArgumentException.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpInvalidArgumentException.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpServiceException.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpServiceException.java
similarity index 96%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpServiceException.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpServiceException.java
index d647bf18..225fcf4f 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/OtpServiceException.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/OtpServiceException.java
@@ -1,16 +1,16 @@
-package io.mosip.kernel.otpmanager.exception;
-
-import io.mosip.kernel.core.exception.BaseUncheckedException;
-
-public class OtpServiceException extends BaseUncheckedException {
-
- /**
- *
- */
- private static final long serialVersionUID = 6963954493840799987L;
-
- public OtpServiceException(String errorCode, String errorMessage, Throwable rootCause) {
- super(errorCode, errorMessage, rootCause);
- }
-
-}
+package io.mosip.kernel.otpmanager.exception;
+
+import io.mosip.kernel.core.exception.BaseUncheckedException;
+
+public class OtpServiceException extends BaseUncheckedException {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 6963954493840799987L;
+
+ public OtpServiceException(String errorCode, String errorMessage, Throwable rootCause) {
+ super(errorCode, errorMessage, rootCause);
+ }
+
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/RequiredKeyNotFoundException.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/RequiredKeyNotFoundException.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/RequiredKeyNotFoundException.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/RequiredKeyNotFoundException.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/ResourceNotFoundException.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/ResourceNotFoundException.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/exception/ResourceNotFoundException.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/exception/ResourceNotFoundException.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/repository/OtpRepository.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/repository/OtpRepository.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/repository/OtpRepository.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/repository/OtpRepository.java
diff --git a/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/PersistenceService.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/PersistenceService.java
new file mode 100644
index 00000000..4d2f0457
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/PersistenceService.java
@@ -0,0 +1,16 @@
+package io.mosip.kernel.otpmanager.service;
+
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+
+import java.util.Map;
+
+public interface PersistenceService {
+
+ public void saveOtp(OtpEntity otpEntity);
+
+ public OtpEntity findOtpByKey(String key);
+
+ public void deleteOtpByKey(String key);
+
+ public void updateOtp(Map updateMap);
+}
diff --git a/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/CachePersistenceServiceImpl.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/CachePersistenceServiceImpl.java
new file mode 100644
index 00000000..29df15e2
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/CachePersistenceServiceImpl.java
@@ -0,0 +1,66 @@
+package io.mosip.kernel.otpmanager.service.impl;
+
+import io.mosip.kernel.core.util.StringUtils;
+import io.mosip.kernel.otpmanager.constant.SqlQueryConstants;
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+import io.mosip.kernel.otpmanager.service.PersistenceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cache.CacheManager;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.Map;
+
+
+@ConditionalOnProperty(name = "mosip.datastore.type", havingValue = "cache")
+@Component
+public class CachePersistenceServiceImpl implements PersistenceService {
+ @Autowired
+ CacheManager cacheManager;
+
+
+ @Value("${mosip.datastore.cache.name}")
+ String cache;
+
+ @Override
+ public void saveOtp(OtpEntity otpEntity) {
+
+ cacheManager.getCache(cache).put(otpEntity.getId(),otpEntity);
+ }
+
+ @Override
+ public OtpEntity findOtpByKey(String key) {
+ return cacheManager.getCache(cache).get(key,OtpEntity.class);
+ }
+
+ @Override
+ public void deleteOtpByKey(String key) {
+ cacheManager.getCache(cache).evict(key);
+ }
+
+ @Override
+ public void updateOtp(Map updateMap) {
+
+ OtpEntity otpEntity = cacheManager.getCache(cache).get(updateMap.get(SqlQueryConstants.ID.getProperty()).toString(), OtpEntity.class);
+ for(String key: updateMap.keySet()){
+ if (StringUtils.equals(key,SqlQueryConstants.ID.getProperty())) {
+ otpEntity.setId(key);
+ continue;
+ }
+ if (StringUtils.equals(key,SqlQueryConstants.NEW_OTP_STATUS.getProperty())) {
+ otpEntity.setStatusCode(updateMap.get(SqlQueryConstants.NEW_OTP_STATUS.getProperty()).toString());
+ continue;
+ }
+ if (StringUtils.equals(key,SqlQueryConstants.NEW_NUM_OF_ATTEMPT.getProperty())) {
+ otpEntity.setValidationRetryCount(Integer.parseInt(updateMap.get(SqlQueryConstants.NEW_NUM_OF_ATTEMPT.getProperty()).toString()));
+ continue;
+ }
+ if (StringUtils.equals(key,SqlQueryConstants.NEW_VALIDATION_TIME.getProperty())) {
+ otpEntity.setUpdatedDtimes((LocalDateTime) updateMap.get(SqlQueryConstants.NEW_VALIDATION_TIME.getProperty()));
+ }
+ }
+ cacheManager.getCache(cache).put(otpEntity.getId(),otpEntity);
+ }
+}
diff --git a/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/DatabasePersistenceServiceImpl.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/DatabasePersistenceServiceImpl.java
new file mode 100644
index 00000000..af8561da
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/DatabasePersistenceServiceImpl.java
@@ -0,0 +1,53 @@
+package io.mosip.kernel.otpmanager.service.impl;
+
+import io.mosip.kernel.otpmanager.constant.SqlQueryConstants;
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+import io.mosip.kernel.otpmanager.repository.OtpRepository;
+import io.mosip.kernel.otpmanager.service.PersistenceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@ConditionalOnProperty(name = "mosip.datastore.type", havingValue = "postgres")
+@Component
+public class DatabasePersistenceServiceImpl implements PersistenceService {
+
+ private final String UPDATE_OTP_STATUS = "updateOtpStatus";
+
+ private final String UPDATE_OTP_ATTEMPT = "updateOtpAttempt";
+
+ @Autowired
+ private OtpRepository otpRepository;
+
+ @Override
+ public void saveOtp(OtpEntity otpEntity) {
+ otpRepository.save(otpEntity);
+ }
+
+ @Override
+ public OtpEntity findOtpByKey(String key) {
+ return otpRepository.findById(OtpEntity.class,key);
+ }
+
+ @Override
+ public void deleteOtpByKey(String key) {
+ otpRepository.deleteById(key);
+ }
+
+ @Override
+ public void updateOtp(Map updateMap) {
+ String updateString;
+ if(updateMap.containsKey(SqlQueryConstants.NEW_OTP_STATUS.getProperty())){
+ updateString = SqlQueryConstants.UPDATE.getProperty() + " " + OtpEntity.class.getSimpleName()
+ + " SET status_code = :newOtpStatus," + "upd_dtimes = :newValidationTime,"
+ + "validation_retry_count = :newNumOfAttempt WHERE id=:id";
+ }else{
+ updateString=SqlQueryConstants.UPDATE.getProperty() + " " + OtpEntity.class.getSimpleName()
+ + " SET validation_retry_count = :newNumOfAttempt,"
+ + "upd_dtimes = :newValidationTime WHERE id=:id";
+ }
+ otpRepository.createQueryUpdateOrDelete(updateString, updateMap);
+ }
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpGeneratorServiceImpl.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpGeneratorServiceImpl.java
similarity index 83%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpGeneratorServiceImpl.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpGeneratorServiceImpl.java
index a5f9798a..cf8126dc 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpGeneratorServiceImpl.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpGeneratorServiceImpl.java
@@ -1,94 +1,89 @@
-package io.mosip.kernel.otpmanager.service.impl;
-
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.cloud.context.config.annotation.RefreshScope;
-import org.springframework.stereotype.Service;
-
-import io.mosip.kernel.core.otpmanager.spi.OtpGenerator;
-import io.mosip.kernel.otpmanager.constant.OtpStatusConstants;
-import io.mosip.kernel.otpmanager.dto.OtpGeneratorRequestDto;
-import io.mosip.kernel.otpmanager.dto.OtpGeneratorResponseDto;
-import io.mosip.kernel.otpmanager.entity.OtpEntity;
-import io.mosip.kernel.otpmanager.repository.OtpRepository;
-import io.mosip.kernel.otpmanager.util.OtpManagerUtils;
-import io.mosip.kernel.otpmanager.util.OtpProvider;
-
-/**
- * This class provides the implementation for the methods of OtpGeneratorService
- * interface.
- *
- * @author Ritesh Sinha
- * @since 1.0.0
- *
- */
-@RefreshScope
-@Service
-public class OtpGeneratorServiceImpl implements OtpGenerator {
- /**
- * The reference that autowires OtpRepository class.
- */
- private static final Logger LOGGER = LoggerFactory.getLogger(OtpGeneratorServiceImpl.class);
- @Autowired
- private OtpRepository otpRepository;
-
- @Autowired
- private OtpProvider otpProvider;
-
- @Value("${mosip.kernel.otp.key-freeze-time}")
- String keyFreezeTime;
-
- @Value("${mosip.kernel.otp.default-length}")
- int otpLength;
-
- @Value("${mosip.kernel.otp.mac-algorithm}")
- String macAlgorithm;
-
- @Value("${javax.persistence.jdbc.url}")
- String jdbcUrl;
-
-
- /*
- * (non-Javadoc)
- *
- * @see
- * io.mosip.kernel.otpmanagerservice.service.OtpGeneratorService#getOtp(org.
- * mosip.kernel.otpmanagerservice.dto.OtpGeneratorRequestDto)
- */
- @Override
- public OtpGeneratorResponseDto getOtp(OtpGeneratorRequestDto otpDto) {
-
- String generatedOtp;
-
- /*
- * Creating object to return the generation response.
- */
- OtpGeneratorResponseDto response = new OtpGeneratorResponseDto();
- /*
- * Checking whether the key exists in the repository.
- */
- OtpEntity keyCheck = otpRepository.findById(OtpEntity.class, otpDto.getKey());
- if ((keyCheck != null) && (keyCheck.getStatusCode().equals(OtpStatusConstants.KEY_FREEZED.getProperty()))
- && (OtpManagerUtils.timeDifferenceInSeconds(keyCheck.getUpdatedDtimes(),
- LocalDateTime.now(ZoneId.of("UTC"))) <= Integer.parseInt(keyFreezeTime))) {
- response.setOtp(OtpStatusConstants.SET_AS_NULL_IN_STRING.getProperty());
- response.setStatus(OtpStatusConstants.BLOCKED_USER.getProperty());
- } else {
- generatedOtp = otpProvider.computeOtp(otpDto.getKey(), otpLength, macAlgorithm);
-
- OtpEntity otp = new OtpEntity();
- otp.setId(otpDto.getKey());
- otp.setValidationRetryCount(0);
- otp.setOtp(generatedOtp);
- otpRepository.save(otp);
- response.setOtp(generatedOtp);
- response.setStatus(OtpStatusConstants.GENERATION_SUCCESSFUL.getProperty());
- }
- return response;
- }
-}
+package io.mosip.kernel.otpmanager.service.impl;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+
+import io.mosip.kernel.otpmanager.service.PersistenceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+
+import io.mosip.kernel.core.otpmanager.spi.OtpGenerator;
+import io.mosip.kernel.otpmanager.constant.OtpStatusConstants;
+import io.mosip.kernel.otpmanager.dto.OtpGeneratorRequestDto;
+import io.mosip.kernel.otpmanager.dto.OtpGeneratorResponseDto;
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+import io.mosip.kernel.otpmanager.util.OtpManagerUtils;
+import io.mosip.kernel.otpmanager.util.OtpProvider;
+
+/**
+ * This class provides the implementation for the methods of OtpGeneratorService
+ * interface.
+ *
+ * @author Ritesh Sinha
+ * @since 1.0.0
+ *
+ */
+@RefreshScope
+@Service
+public class OtpGeneratorServiceImpl implements OtpGenerator {
+
+ @Autowired
+ private OtpProvider otpProvider;
+
+ @Autowired
+ PersistenceService persistenceService;
+
+ @Value("${mosip.kernel.otp.key-freeze-time}")
+ String keyFreezeTime;
+
+ @Value("${mosip.kernel.otp.default-length}")
+ int otpLength;
+
+ @Value("${mosip.kernel.otp.mac-algorithm}")
+ String macAlgorithm;
+
+ @Value("${javax.persistence.jdbc.url}")
+ String jdbcUrl;
+
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * io.mosip.kernel.otpmanagerservice.service.OtpGeneratorService#getOtp(org.
+ * mosip.kernel.otpmanagerservice.dto.OtpGeneratorRequestDto)
+ */
+ @Override
+ public OtpGeneratorResponseDto getOtp(OtpGeneratorRequestDto otpDto) {
+
+ String generatedOtp;
+
+ /*
+ * Creating object to return the generation response.
+ */
+ OtpGeneratorResponseDto response = new OtpGeneratorResponseDto();
+ /*
+ * Checking whether the key exists in the repository.
+ */
+ OtpEntity keyCheck= persistenceService.findOtpByKey(otpDto.getKey());
+ if ((keyCheck != null) && (keyCheck.getStatusCode().equals(OtpStatusConstants.KEY_FREEZED.getProperty()))
+ && (OtpManagerUtils.timeDifferenceInSeconds(keyCheck.getUpdatedDtimes(),
+ LocalDateTime.now(ZoneId.of("UTC"))) <= Integer.parseInt(keyFreezeTime))) {
+ response.setOtp(OtpStatusConstants.SET_AS_NULL_IN_STRING.getProperty());
+ response.setStatus(OtpStatusConstants.BLOCKED_USER.getProperty());
+ } else {
+ generatedOtp = otpProvider.computeOtp(otpDto.getKey(), otpLength, macAlgorithm);
+
+ OtpEntity otp = new OtpEntity();
+ otp.setId(otpDto.getKey());
+ otp.setValidationRetryCount(0);
+ otp.setOtp(generatedOtp);
+ persistenceService.saveOtp(otp);
+ response.setOtp(generatedOtp);
+ response.setStatus(OtpStatusConstants.GENERATION_SUCCESSFUL.getProperty());
+ }
+ return response;
+ }
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpValidatorServiceImpl.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpValidatorServiceImpl.java
similarity index 82%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpValidatorServiceImpl.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpValidatorServiceImpl.java
index c7850308..13c4c01b 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpValidatorServiceImpl.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/service/impl/OtpValidatorServiceImpl.java
@@ -6,6 +6,7 @@
import java.util.HashMap;
import java.util.List;
+import io.mosip.kernel.otpmanager.service.PersistenceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
@@ -21,7 +22,6 @@
import io.mosip.kernel.otpmanager.dto.OtpValidatorResponseDto;
import io.mosip.kernel.otpmanager.entity.OtpEntity;
import io.mosip.kernel.otpmanager.exception.RequiredKeyNotFoundException;
-import io.mosip.kernel.otpmanager.repository.OtpRepository;
import io.mosip.kernel.otpmanager.util.OtpManagerUtils;
/**
@@ -35,11 +35,9 @@
@RefreshScope
@Service
public class OtpValidatorServiceImpl implements OtpValidator> {
- /**
- * The reference that autowires OtpRepository.
- */
+
@Autowired
- OtpRepository otpRepository;
+ PersistenceService persistenceService;
/**
* The reference that autowires OtpManagerUtils.
@@ -64,13 +62,11 @@ public class OtpValidatorServiceImpl implements OtpValidator validateOtp(String key, String otp) {
ResponseEntity validationResponseEntity;
@@ -82,17 +78,16 @@ public ResponseEntity validateOtp(String key, String ot
OtpValidatorResponseDto responseDto;
// The OTP entity for a specific key.
- OtpEntity otpResponse = otpRepository.findById(OtpEntity.class, key);
+ OtpEntity otpResponse = persistenceService.findOtpByKey(key);
responseDto = new OtpValidatorResponseDto();
responseDto.setMessage(OtpStatusConstants.FAILURE_MESSAGE.getProperty());
responseDto.setStatus(OtpStatusConstants.FAILURE_STATUS.getProperty());
validationResponseEntity = new ResponseEntity<>(responseDto, HttpStatus.OK);
requireKeyNotFound(otpResponse);
- // This variable holds the update query to be performed.
- String updateString;
// This variable holds the count of number
int attemptCount = otpResponse.getValidationRetryCount();
+ //checking the expiry
if ((OtpManagerUtils.timeDifferenceInSeconds(otpResponse.getGeneratedDtimes(),
OtpManagerUtils.getCurrentLocalDateTime())) > (Integer.parseInt(otpExpiryLimit))) {
@@ -103,12 +98,10 @@ public ResponseEntity validateOtp(String key, String ot
// This condition increases the validation attempt count.
if ((attemptCount < Integer.parseInt(numberOfValidationAttemptsAllowed))
&& (otpResponse.getStatusCode().equals(OtpStatusConstants.UNUSED_OTP.getProperty()))) {
- updateString = SqlQueryConstants.UPDATE.getProperty() + " " + OtpEntity.class.getSimpleName()
- + " SET validation_retry_count = :newNumOfAttempt,"
- + "upd_dtimes = :newValidationTime WHERE id=:id";
HashMap updateMap = createUpdateMap(key, null, attemptCount + 1,
LocalDateTime.now(ZoneId.of("UTC")));
- updateData(updateString, updateMap);
+
+ persistenceService.updateOtp(updateMap);
}
/*
* This condition freezes the key for a certain time, if the validation attempt
@@ -116,12 +109,9 @@ public ResponseEntity validateOtp(String key, String ot
*/
if ((attemptCount == Integer.parseInt(numberOfValidationAttemptsAllowed) - 1)
&& (!otp.equals(otpResponse.getOtp()))) {
- updateString = SqlQueryConstants.UPDATE.getProperty() + " " + OtpEntity.class.getSimpleName()
- + " SET status_code = :newOtpStatus," + "upd_dtimes = :newValidationTime,"
- + "validation_retry_count = :newNumOfAttempt WHERE id=:id";
HashMap updateMap = createUpdateMap(key, OtpStatusConstants.KEY_FREEZED.getProperty(), 0,
OtpManagerUtils.getCurrentLocalDateTime());
- updateData(updateString, updateMap);
+ persistenceService.updateOtp(updateMap);
responseDto.setStatus(OtpStatusConstants.FAILURE_STATUS.getProperty());
responseDto.setMessage(OtpStatusConstants.FAILURE_AND_FREEZED_MESSAGE.getProperty());
validationResponseEntity = new ResponseEntity<>(responseDto, HttpStatus.OK);
@@ -143,7 +133,7 @@ public ResponseEntity validateOtp(String key, String ot
OtpManagerUtils.getCurrentLocalDateTime())) <= (Integer.parseInt(otpExpiryLimit))))) {
responseDto.setStatus(OtpStatusConstants.SUCCESS_STATUS.getProperty());
responseDto.setMessage(OtpStatusConstants.SUCCESS_MESSAGE.getProperty());
- otpRepository.deleteById(key);
+ persistenceService.deleteOtpByKey(key);
return new ResponseEntity<>(responseDto, HttpStatus.OK);
}
return validationResponseEntity;
@@ -169,14 +159,13 @@ private ResponseEntity proxyForLocalProfile(String otp)
if (otp.equalsIgnoreCase(localOtp)) {
responseDto.setStatus(OtpStatusConstants.SUCCESS_STATUS.getProperty());
responseDto.setMessage(OtpStatusConstants.SUCCESS_MESSAGE.getProperty());
- validationResponseEntity = new ResponseEntity<>(responseDto, HttpStatus.OK);
- return validationResponseEntity;
+
} else {
responseDto.setStatus(OtpStatusConstants.FAILURE_STATUS.getProperty());
responseDto.setMessage(OtpStatusConstants.FAILURE_MESSAGE.getProperty());
- validationResponseEntity = new ResponseEntity<>(responseDto, HttpStatus.OK);
- return validationResponseEntity;
}
+ validationResponseEntity = new ResponseEntity<>(responseDto, HttpStatus.OK);
+ return validationResponseEntity;
}
/**
@@ -195,22 +184,18 @@ private ResponseEntity proxyForLocalProfile(String otp)
private ResponseEntity unFreezeKey(String key, String otp, OtpEntity otpResponse,
int attemptCount, OtpValidatorResponseDto responseDto,
ResponseEntity validationResponseEntity) {
- String updateString;
if (otpResponse.getStatusCode().equals(OtpStatusConstants.KEY_FREEZED.getProperty())) {
if ((OtpManagerUtils.timeDifferenceInSeconds(otpResponse.getUpdatedDtimes(),
OtpManagerUtils.getCurrentLocalDateTime())) > (Integer.parseInt(keyFreezeDuration))) {
- updateString = SqlQueryConstants.UPDATE.getProperty() + " " + OtpEntity.class.getSimpleName()
- + " SET status_code = :newOtpStatus," + " validation_retry_count = :newNumOfAttempt,"
- + " upd_dtimes = :newValidationTime WHERE id=:id";
HashMap updateMap = createUpdateMap(key, OtpStatusConstants.UNUSED_OTP.getProperty(),
Integer.valueOf(attemptCount + 1), OtpManagerUtils.getCurrentLocalDateTime());
if (otp.equals(otpResponse.getOtp())) {
responseDto.setStatus(OtpStatusConstants.SUCCESS_STATUS.getProperty());
responseDto.setMessage(OtpStatusConstants.SUCCESS_MESSAGE.getProperty());
validationResponseEntity = new ResponseEntity<>(responseDto, HttpStatus.OK);
- otpRepository.deleteById(key);
+ persistenceService.deleteOtpByKey(key);
} else {
- updateData(updateString, updateMap);
+ persistenceService.updateOtp(updateMap);
}
} else {
responseDto.setMessage(OtpStatusConstants.FAILURE_AND_FREEZED_MESSAGE.getProperty());
@@ -247,13 +232,4 @@ private HashMap createUpdateMap(String key, String status, Integ
return updateMap;
}
- /**
- * This method handles UPDATE query operations.
- *
- * @param updateString the query string.
- * @param updateMap the query map.
- */
- private void updateData(String updateString, HashMap updateMap) {
- otpRepository.createQueryUpdateOrDelete(updateString, updateMap);
- }
}
\ No newline at end of file
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/OtpManagerUtils.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/OtpManagerUtils.java
similarity index 100%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/OtpManagerUtils.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/OtpManagerUtils.java
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/OtpProvider.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/OtpProvider.java
similarity index 97%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/OtpProvider.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/OtpProvider.java
index 3504cc2b..d9f053fe 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/OtpProvider.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/OtpProvider.java
@@ -1,61 +1,61 @@
-package io.mosip.kernel.otpmanager.util;
-
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-
-import javax.crypto.Mac;
-import javax.crypto.spec.SecretKeySpec;
-
-import org.springframework.stereotype.Component;
-
-import io.mosip.kernel.otpmanager.constant.OtpErrorConstants;
-import io.mosip.kernel.otpmanager.exception.CryptoFailureException;
-import io.mosip.kernel.otpmanager.exception.OtpServiceException;
-import io.mosip.kernel.otpmanager.util.PasscodeGenerator.Signer;
-
-/**
- * This class contains methods to generate OTP.
- *
- * @author Ritesh Sinha
- * @since 1.0.0
- *
- */
-@Component
-public class OtpProvider {
-
- /**
- * This method compute OTP against provided key and macAlgo.
- *
- * @param key the key against which OTP generates.
- * @param otpLength the length of OTP.
- * @param macAlgorithm the crypto algorithm.
- * @return the string OTP.
- */
- public String computeOtp(String key, int otpLength, String macAlgorithm) {
- try {
- PasscodeGenerator pcg = new PasscodeGenerator(getSigning(key, macAlgorithm), otpLength);
- return pcg.generateResponseCode(System.currentTimeMillis());
- } catch (Exception e) {
- throw new CryptoFailureException(OtpErrorConstants.OTP_GEN_CRYPTO_FAILURE.getErrorCode(),
- OtpErrorConstants.OTP_GEN_CRYPTO_FAILURE.getErrorMessage(), e);
- }
- }
-
- /**
- * Method to generate Signer for provided key.
- *
- * @param secret the key for which signer generates.
- * @param macAlgo the crypto algorithm.
- * @return the signer.
- */
- static Signer getSigning(String secret, String macAlgo) {
- try {
- final Mac mac = Mac.getInstance(macAlgo);
- mac.init(new SecretKeySpec(secret.getBytes(), ""));
- return (byte[] data) -> mac.doFinal(data);
- } catch (NoSuchAlgorithmException | InvalidKeyException error) {
- throw new OtpServiceException(OtpErrorConstants.OTP_GEN_ALGO_FAILURE.getErrorCode(),
- OtpErrorConstants.OTP_GEN_ALGO_FAILURE.getErrorMessage(), error);
- }
- }
-}
+package io.mosip.kernel.otpmanager.util;
+
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.springframework.stereotype.Component;
+
+import io.mosip.kernel.otpmanager.constant.OtpErrorConstants;
+import io.mosip.kernel.otpmanager.exception.CryptoFailureException;
+import io.mosip.kernel.otpmanager.exception.OtpServiceException;
+import io.mosip.kernel.otpmanager.util.PasscodeGenerator.Signer;
+
+/**
+ * This class contains methods to generate OTP.
+ *
+ * @author Ritesh Sinha
+ * @since 1.0.0
+ *
+ */
+@Component
+public class OtpProvider {
+
+ /**
+ * This method compute OTP against provided key and macAlgo.
+ *
+ * @param key the key against which OTP generates.
+ * @param otpLength the length of OTP.
+ * @param macAlgorithm the crypto algorithm.
+ * @return the string OTP.
+ */
+ public String computeOtp(String key, int otpLength, String macAlgorithm) {
+ try {
+ PasscodeGenerator pcg = new PasscodeGenerator(getSigning(key, macAlgorithm), otpLength);
+ return pcg.generateResponseCode(System.currentTimeMillis());
+ } catch (Exception e) {
+ throw new CryptoFailureException(OtpErrorConstants.OTP_GEN_CRYPTO_FAILURE.getErrorCode(),
+ OtpErrorConstants.OTP_GEN_CRYPTO_FAILURE.getErrorMessage(), e);
+ }
+ }
+
+ /**
+ * Method to generate Signer for provided key.
+ *
+ * @param secret the key for which signer generates.
+ * @param macAlgo the crypto algorithm.
+ * @return the signer.
+ */
+ static Signer getSigning(String secret, String macAlgo) {
+ try {
+ final Mac mac = Mac.getInstance(macAlgo);
+ mac.init(new SecretKeySpec(secret.getBytes(), ""));
+ return (byte[] data) -> mac.doFinal(data);
+ } catch (NoSuchAlgorithmException | InvalidKeyException error) {
+ throw new OtpServiceException(OtpErrorConstants.OTP_GEN_ALGO_FAILURE.getErrorCode(),
+ OtpErrorConstants.OTP_GEN_ALGO_FAILURE.getErrorMessage(), error);
+ }
+ }
+}
diff --git a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/PasscodeGenerator.java b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/PasscodeGenerator.java
similarity index 96%
rename from kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/PasscodeGenerator.java
rename to kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/PasscodeGenerator.java
index 85729a6d..6bfe8468 100644
--- a/kernel/kernel-otpmanager-service/src/main/java/io/mosip/kernel/otpmanager/util/PasscodeGenerator.java
+++ b/kernel/kernel-otpmanager/src/main/java/io/mosip/kernel/otpmanager/util/PasscodeGenerator.java
@@ -1,100 +1,100 @@
-package io.mosip.kernel.otpmanager.util;
-
-import java.io.ByteArrayInputStream;
-import java.io.DataInput;
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.security.GeneralSecurityException;
-
-import io.mosip.kernel.otpmanager.constant.OtpErrorConstants;
-import io.mosip.kernel.otpmanager.exception.OtpIOException;
-
-/**
- * Passcode generator class.
- *
- * @author Ritesh Sinha
- * @since 1.0.0
- */
-public class PasscodeGenerator {
-
- /** Powers of 10 used to shorten the pin to the desired number of digits */
- private static final int[] DIGITS_POWER = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000,
- 1000000000 };
-
- private final Signer signer;
-
- private final int codeLength;
-
- /**
- * Using an interface to allow us to inject different signature implementations.
- */
- interface Signer {
- /**
- * @param data Preimage to sign, represented as sequence of arbitrary bytes
- * @return Signature as sequence of bytes.
- * @throws GeneralSecurityException
- */
- byte[] sign(byte[] data) throws GeneralSecurityException;
- }
-
- public PasscodeGenerator(Signer signer, int passCodeLength) {
- this.signer = signer;
- this.codeLength = passCodeLength;
- }
-
- private String padOutput(int value) {
- StringBuilder result = new StringBuilder(Integer.toString(value));
- for (int i = result.length(); i < codeLength; i++) {
- result.insert(0, "0");
- }
- return result.toString();
- }
-
- /**
- * @param state 8-byte integer value representing internal OTP state.
- * @return A decimal response code
- * @throws GeneralSecurityException If a JCE exception occur
- */
- public String generateResponseCode(long state) throws GeneralSecurityException {
- byte[] value = ByteBuffer.allocate(8).putLong(state).array();
- return generateResponseCode(value);
- }
-
- /**
- * @param value An arbitrary byte array used as a value
- * @return A decimal response code
- * @throws GeneralSecurityException If a JCE exception occur
- */
- public String generateResponseCode(byte[] value) throws GeneralSecurityException {
- byte[] hash = signer.sign(value);
-
- // Dynamically truncate the hash
- // OffsetBits are the low order bits of the last byte of the hash
- int offset = hash[hash.length - 1] & 0xF;
- // Grab a positive integer value starting at the given offset.
- int truncatedHash = hashToInt(hash, offset) & 0x7FFFFFFF;
- int pinValue = truncatedHash % DIGITS_POWER[codeLength];
- return padOutput(pinValue);
- }
-
- /**
- * Grabs a positive integer value from the input array starting at the given
- * offset.
- *
- * @param bytes the array of bytes
- * @param start the index into the array to start grabbing bytes
- * @return the integer constructed from the four bytes in the array
- */
- private int hashToInt(byte[] bytes, int start) {
- DataInput input = new DataInputStream(new ByteArrayInputStream(bytes, start, bytes.length - start));
- int val;
- try {
- val = input.readInt();
- } catch (IOException e) {
- throw new OtpIOException(OtpErrorConstants.OTP_GEN_IO_FAILURE.getErrorCode(),
- OtpErrorConstants.OTP_GEN_IO_FAILURE.getErrorMessage(), e);
- }
- return val;
- }
-}
+package io.mosip.kernel.otpmanager.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.security.GeneralSecurityException;
+
+import io.mosip.kernel.otpmanager.constant.OtpErrorConstants;
+import io.mosip.kernel.otpmanager.exception.OtpIOException;
+
+/**
+ * Passcode generator class.
+ *
+ * @author Ritesh Sinha
+ * @since 1.0.0
+ */
+public class PasscodeGenerator {
+
+ /** Powers of 10 used to shorten the pin to the desired number of digits */
+ private static final int[] DIGITS_POWER = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000,
+ 1000000000 };
+
+ private final Signer signer;
+
+ private final int codeLength;
+
+ /**
+ * Using an interface to allow us to inject different signature implementations.
+ */
+ interface Signer {
+ /**
+ * @param data Preimage to sign, represented as sequence of arbitrary bytes
+ * @return Signature as sequence of bytes.
+ * @throws GeneralSecurityException
+ */
+ byte[] sign(byte[] data) throws GeneralSecurityException;
+ }
+
+ public PasscodeGenerator(Signer signer, int passCodeLength) {
+ this.signer = signer;
+ this.codeLength = passCodeLength;
+ }
+
+ private String padOutput(int value) {
+ StringBuilder result = new StringBuilder(Integer.toString(value));
+ for (int i = result.length(); i < codeLength; i++) {
+ result.insert(0, "0");
+ }
+ return result.toString();
+ }
+
+ /**
+ * @param state 8-byte integer value representing internal OTP state.
+ * @return A decimal response code
+ * @throws GeneralSecurityException If a JCE exception occur
+ */
+ public String generateResponseCode(long state) throws GeneralSecurityException {
+ byte[] value = ByteBuffer.allocate(8).putLong(state).array();
+ return generateResponseCode(value);
+ }
+
+ /**
+ * @param value An arbitrary byte array used as a value
+ * @return A decimal response code
+ * @throws GeneralSecurityException If a JCE exception occur
+ */
+ public String generateResponseCode(byte[] value) throws GeneralSecurityException {
+ byte[] hash = signer.sign(value);
+
+ // Dynamically truncate the hash
+ // OffsetBits are the low order bits of the last byte of the hash
+ int offset = hash[hash.length - 1] & 0xF;
+ // Grab a positive integer value starting at the given offset.
+ int truncatedHash = hashToInt(hash, offset) & 0x7FFFFFFF;
+ int pinValue = truncatedHash % DIGITS_POWER[codeLength];
+ return padOutput(pinValue);
+ }
+
+ /**
+ * Grabs a positive integer value from the input array starting at the given
+ * offset.
+ *
+ * @param bytes the array of bytes
+ * @param start the index into the array to start grabbing bytes
+ * @return the integer constructed from the four bytes in the array
+ */
+ private int hashToInt(byte[] bytes, int start) {
+ DataInput input = new DataInputStream(new ByteArrayInputStream(bytes, start, bytes.length - start));
+ int val;
+ try {
+ val = input.readInt();
+ } catch (IOException e) {
+ throw new OtpIOException(OtpErrorConstants.OTP_GEN_IO_FAILURE.getErrorCode(),
+ OtpErrorConstants.OTP_GEN_IO_FAILURE.getErrorMessage(), e);
+ }
+ return val;
+ }
+}
diff --git a/kernel/kernel-otpmanager/src/main/resources/application-dev.properties b/kernel/kernel-otpmanager/src/main/resources/application-dev.properties
new file mode 100644
index 00000000..5896e03a
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/resources/application-dev.properties
@@ -0,0 +1,27 @@
+#the default length for otp(in number)
+mosip.kernel.otp.default-length=6
+#the default crypto function
+#It can be: HmacSHA512, HmacSHA256, HmacSHA1.
+mosip.kernel.otp.mac-algorithm=HmacSHA512
+#the OTP expires after the given time(in seconds).
+mosip.kernel.otp.expiry-time=120
+#the key is freezed for the given time(in seconds).
+mosip.kernel.otp.key-freeze-time=7200
+#the number of validation attempts allowed(in number).
+#mosip.kernel.otp.validation-attempt-threshold =3 means , the validation and generation will be blocked from 4th time.
+mosip.kernel.otp.validation-attempt-threshold=3
+#minimum length of key(in number).
+mosip.kernel.otp.min-key-length=3
+#maximum length of key(in number).
+mosip.kernel.otp.max-key-length=64
+spring.h2.console.enabled=true
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.hbm2ddl.auto=update
+javax.persistence.jdbc.driver=org.h2.Driver
+otpmanager_database_url=jdbc:h2:mem:mosip_kernel;
+otpmanager_database_username=kerneluser
+otpmanager_database_password=Mosip@dev123
+
+auth.server.validate.url=http://localhost:8091/authmanager/authorize/validateToken
+auth.role.prefix=ROLE_
+auth.header.name=Authorization
diff --git a/kernel/kernel-otpmanager/src/main/resources/application-local.properties b/kernel/kernel-otpmanager/src/main/resources/application-local.properties
new file mode 100644
index 00000000..08056c61
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/resources/application-local.properties
@@ -0,0 +1,46 @@
+##the default length for otp(in number)
+#mosip.kernel.otp.default-length=6
+##the default crypto function
+##It can be: HmacSHA512, HmacSHA256, HmacSHA1.
+#mosip.kernel.otp.mac-algorithm=HmacSHA512
+##the OTP expires after the given time(in seconds).
+#mosip.kernel.otp.expiry-time=120
+##the key is freezed for the given time(in seconds).
+#mosip.kernel.otp.key-freeze-time=7200
+##the number of validation attempts allowed(in number).
+##mosip.kernel.otp.validation-attempt-threshold =3 means , the validation and generation will be blocked from 4th time.
+#mosip.kernel.otp.validation-attempt-threshold=3
+##minimum length of key(in number).
+#mosip.kernel.otp.min-key-length=3
+##maximum length of key(in number).
+#mosip.kernel.otp.max-key-length=64
+#
+#javax.persistence.jdbc.driver=org.h2.Driver
+#javax.persistence.jdbc.url=jdbc:h2:mem:mosip_kernel;INIT=RUNSCRIPT FROM 'classpath:schema.sql';DB_CLOSE_DELAY=-1;
+#javax.persistence.jdbc.user=kerneluser
+#javax.persistence.jdbc.password=Mosip@dev123
+#auth.server.validate.url=http://localhost:8091/authmanager/authorize/admin/validateToken
+#auth.role.prefix=ROLE_
+#auth.header.name=Authorization
+#
+#spring.h2.console.enabled=true
+#
+#
+#hibernate.dialect=org.hibernate.dialect.H2Dialect
+#hibernate.jdbc.lob.non_contextual_creation=true
+#hibernate.hbm2ddl.auto=update
+#hibernate.show_sql=true
+#hibernate.format_sql=true
+#hibernate.connection.charSet=utf8
+#hibernate.cache.use_second_level_cache=false
+#hibernate.cache.use_query_cache=false
+#hibernate.cache.use_structured_entries=false
+#hibernate.generate_statistics=false
+#
+#mosip.role.kernel.postotpgenerate=INDIVIDUAL,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ID_AUTHENTICATION,AUTH,RESIDENT,REGISTRATION_OFFICER
+#mosip.role.kernel.getotpvalidate=INDIVIDUAL,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ID_AUTHENTICATION,AUTH,RESIDENT,REGISTRATION_OFFICER
+#
+#mosip.datastore.type=postgres
+#mosip.service-context=/v1/otpmanager
+#mosip.service.end-points=/**/*
+#mosip.service.exclude.auth.allowed.method=GET,POST
\ No newline at end of file
diff --git a/kernel/kernel-otpmanager/src/main/resources/bootstrap.properties b/kernel/kernel-otpmanager/src/main/resources/bootstrap.properties
new file mode 100644
index 00000000..437ff417
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/resources/bootstrap.properties
@@ -0,0 +1,36 @@
+#spring.cloud.config.uri=localhost
+#spring.cloud.config.label=master
+spring.profiles.active=local
+spring.cloud.config.name=kernel
+spring.application.name=kernel-otpmanager-service
+#management.security.enabled=false
+#management.endpoint.health.show-details=when-authorized
+#management.endpoints.web.exposure.include=*
+management.endpoint.health.show-details=always
+management.endpoints.web.exposure.include=info,health,refresh,mappings,prometheus
+management.endpoint.metrics.enabled=true
+management.endpoint.prometheus.enabled=true
+management.metrics.export.prometheus.enabled=true
+
+server.port=8085
+server.servlet.path=/v1/otpmanager
+
+
+javax.persistence.jdbc.url=${otpmanager_database_url}
+javax.persistence.jdbc.user=${otpmanager_database_username}
+javax.persistence.jdbc.password=${otpmanager_database_password}
+
+#disabling health check so that client doesnt try to load properties from sprint config server every
+# 5 minutes (should not be done in production)
+health.config.enabled=false
+openapi.info.title=OTP Manager Service
+openapi.info.description=Rest Endpoints for operations related to OTP
+openapi.info.version=1.0
+openapi.info.license.name=Mosip
+openapi.info.license.url=https://docs.mosip.io/platform/license
+mosipbox.public.url=http://localhost:${server.port}
+openapi.service.servers[0].url=${mosipbox.public.url}${server.servlet.path}
+openapi.service.servers[0].description=OTP Manager Service
+springdoc.swagger-ui.disable-swagger-default-url=true
+spring.mvc.servlet.path=${server.servlet.path}
+
diff --git a/kernel/kernel-otpmanager/src/main/resources/logback.xml b/kernel/kernel-otpmanager/src/main/resources/logback.xml
new file mode 100644
index 00000000..150c6224
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/resources/logback.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kernel/kernel-otpmanager/src/main/resources/schema.sql b/kernel/kernel-otpmanager/src/main/resources/schema.sql
new file mode 100644
index 00000000..297520e3
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/main/resources/schema.sql
@@ -0,0 +1 @@
+CREATE SCHEMA IF NOT EXISTS kernel;
\ No newline at end of file
diff --git a/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/OtpmanagerTestBootApplication.java b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/OtpmanagerTestBootApplication.java
new file mode 100644
index 00000000..8092387b
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/OtpmanagerTestBootApplication.java
@@ -0,0 +1,24 @@
+package io.mosip.kernel.otpmanager.test;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * Crypto manager application
+ *
+ * @author Urvil Joshi
+ * @since 1.0.0
+ *
+ */
+@SpringBootApplication(scanBasePackages = { "io.mosip.kernel.otpmanager.*" })
+public class OtpmanagerTestBootApplication {
+
+ /**
+ * Main method to run spring boot application
+ *
+ * @param args args
+ */
+ public static void main(String[] args) {
+ SpringApplication.run(OtpmanagerTestBootApplication.class, args);
+ }
+}
diff --git a/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/CachePersistenceServiceImplTest.java b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/CachePersistenceServiceImplTest.java
new file mode 100644
index 00000000..b38764ba
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/CachePersistenceServiceImplTest.java
@@ -0,0 +1,89 @@
+package io.mosip.kernel.otpmanager.test.service;
+
+
+import io.mosip.kernel.otpmanager.constant.SqlQueryConstants;
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+import io.mosip.kernel.otpmanager.service.impl.CachePersistenceServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+@RunWith(SpringRunner.class)
+public class CachePersistenceServiceImplTest {
+
+ @Mock
+ CacheManager cacheManager;
+
+ @InjectMocks
+ CachePersistenceServiceImpl cacheDatastore;
+
+ @Mock
+ Cache cache;
+
+
+ @Test
+ public void saveTest(){
+ ReflectionTestUtils.setField(cacheDatastore,"cache","otp");
+ OtpEntity otpEntity=new OtpEntity();
+ otpEntity.setId("key");
+ otpEntity.setOtp("123456");
+ Mockito.when(cacheManager.getCache(Mockito.anyString())).thenReturn(cache);
+
+ Cache cache1=Mockito.mock(Cache.class);
+ Mockito.doNothing().when(cache1).put(Mockito.anyString(), Mockito.any());
+ cacheDatastore.saveOtp(otpEntity);
+
+ }
+
+ @Test
+ public void findOtpByKeyTest(){
+ ReflectionTestUtils.setField(cacheDatastore,"cache","otp");
+ OtpEntity otpEntity=new OtpEntity();
+ otpEntity.setId("key");
+ otpEntity.setOtp("123456");
+ Mockito.when(cacheManager.getCache(Mockito.anyString())).thenReturn(cache);
+ Mockito.when(cache.get("key", OtpEntity.class)).thenReturn(otpEntity);
+
+ cacheDatastore.findOtpByKey("key");
+ }
+
+ @Test
+ public void deleteOtpByKeyTest(){
+
+ ReflectionTestUtils.setField(cacheDatastore,"cache","otp");
+ OtpEntity otpEntity=new OtpEntity();
+ otpEntity.setId("key");
+ otpEntity.setOtp("123456");
+ Mockito.when(cacheManager.getCache(Mockito.anyString())).thenReturn(cache);
+
+ Cache cache1=Mockito.mock(Cache.class);
+ Mockito.doNothing().when(cache1).evict(Mockito.anyString());
+ cacheDatastore.findOtpByKey("key");
+ }
+
+ @Test
+ public void testUpdateOtp() {
+ ReflectionTestUtils.setField(cacheDatastore,"cache","123");
+ OtpEntity otpEntity = new OtpEntity();
+ otpEntity.setId("123");
+ Mockito.when(cache.get("123", OtpEntity.class)).thenReturn(otpEntity);
+
+ Map updateMap = new HashMap<>();
+ updateMap.put(SqlQueryConstants.ID.getProperty(), "123");
+ updateMap.put(SqlQueryConstants.NEW_OTP_STATUS.getProperty(), "ACTIVE");
+ updateMap.put(SqlQueryConstants.NEW_NUM_OF_ATTEMPT.getProperty(), "3");
+ updateMap.put(SqlQueryConstants.NEW_VALIDATION_TIME.getProperty(), LocalDateTime.now());
+
+ Mockito.when(cacheManager.getCache(Mockito.anyString())).thenReturn(cache);
+ cacheDatastore.updateOtp(updateMap);
+ }
+}
diff --git a/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/DatabasePersistenceServiceImplTest.java b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/DatabasePersistenceServiceImplTest.java
new file mode 100644
index 00000000..b79e22f4
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/DatabasePersistenceServiceImplTest.java
@@ -0,0 +1,61 @@
+package io.mosip.kernel.otpmanager.test.service;
+
+import io.mosip.kernel.otpmanager.constant.SqlQueryConstants;
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+import io.mosip.kernel.otpmanager.repository.OtpRepository;
+import io.mosip.kernel.otpmanager.service.impl.DatabasePersistenceServiceImpl;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+@RunWith(SpringRunner.class)
+public class DatabasePersistenceServiceImplTest {
+
+ @Mock
+ private OtpRepository otpRepository;
+
+ @InjectMocks
+ private DatabasePersistenceServiceImpl databaseDatastore;
+
+ @Test
+ public void saveTest(){
+ OtpEntity otpEntity=new OtpEntity();
+ otpEntity.setId("key");
+ otpEntity.setOtp("123456");
+ Mockito.when(otpRepository.save(otpEntity)).thenReturn(otpEntity);
+ databaseDatastore.saveOtp(otpEntity);
+ }
+
+ @Test
+ public void findOtpByKeyTest(){
+ OtpEntity otpEntity=new OtpEntity();
+ otpEntity.setId("key");
+ otpEntity.setOtp("123456");
+ Mockito.when(otpRepository.findById(OtpEntity.class,"key")).thenReturn(otpEntity);
+ databaseDatastore.findOtpByKey("key");
+ }
+
+ @Test
+ public void deleteOtpByKeyTest(){
+ databaseDatastore.deleteOtpByKey("key");
+ }
+
+ @Test
+ public void updateOtpTest() {
+ Map updateMap = new HashMap<>();
+ updateMap.put(SqlQueryConstants.ID.getProperty(), "123");
+ updateMap.put(SqlQueryConstants.NEW_NUM_OF_ATTEMPT.getProperty(), "3");
+ updateMap.put(SqlQueryConstants.NEW_VALIDATION_TIME.getProperty(), LocalDateTime.now());
+ databaseDatastore.updateOtp(updateMap);
+ updateMap.put(SqlQueryConstants.NEW_OTP_STATUS.getProperty(), "ACTIVE");
+ databaseDatastore.updateOtp(updateMap);
+ }
+
+}
diff --git a/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpGeneratorServiceTest.java b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpGeneratorServiceTest.java
new file mode 100644
index 00000000..fa08c326
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpGeneratorServiceTest.java
@@ -0,0 +1,69 @@
+package io.mosip.kernel.otpmanager.test.service;
+
+
+import java.time.LocalDateTime;
+
+import io.mosip.kernel.otpmanager.dto.OtpGeneratorResponseDto;
+import io.mosip.kernel.otpmanager.service.PersistenceService;
+import io.mosip.kernel.otpmanager.service.impl.OtpGeneratorServiceImpl;
+import io.mosip.kernel.otpmanager.util.OtpProvider;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+import io.mosip.kernel.core.http.RequestWrapper;
+import io.mosip.kernel.otpmanager.dto.OtpGeneratorRequestDto;
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+@RunWith(SpringRunner.class)
+public class OtpGeneratorServiceTest {
+
+ @Mock
+ PersistenceService persistenceService;
+
+ @Mock
+ OtpProvider otpProvider;
+
+ @InjectMocks
+ OtpGeneratorServiceImpl otpGeneratorService;
+
+ @Test
+ public void testOtpGenerationFreezedCase() throws Exception {
+ ReflectionTestUtils.setField(otpGeneratorService,"keyFreezeTime","500");
+ OtpGeneratorRequestDto otpGeneratorRequestDto = new OtpGeneratorRequestDto();
+ otpGeneratorRequestDto.setKey("testKey");
+ RequestWrapper reqWrapperDTO = new RequestWrapper<>();
+ reqWrapperDTO.setId("ID");
+ reqWrapperDTO.setMetadata(null);
+ reqWrapperDTO.setRequest(otpGeneratorRequestDto);
+ reqWrapperDTO.setRequesttime(LocalDateTime.now());
+ reqWrapperDTO.setVersion("v1.0");
+
+ OtpEntity otpEntity=new OtpEntity();
+ otpEntity.setId("123");
+ otpEntity.setStatusCode("KEY_FREEZED");
+ otpEntity.setUpdatedDtimes(LocalDateTime.now());
+
+// Mockito.when(repository.findById(Mockito.any(),Mockito.anyString())).thenReturn(otpEntity);
+ Mockito.when(persistenceService.findOtpByKey(Mockito.anyString())).thenReturn(otpEntity);
+
+ otpGeneratorService.getOtp(otpGeneratorRequestDto);
+
+ }
+
+ @Test
+ public void testOtpGeneratorServicePositiveCase() throws Exception {
+ ReflectionTestUtils.setField(otpGeneratorService,"macAlgorithm","SHA257");
+ ReflectionTestUtils.setField(otpGeneratorService,"otpLength",6);
+ OtpGeneratorRequestDto otpGeneratorRequestDto = new OtpGeneratorRequestDto();
+ otpGeneratorRequestDto.setKey("testKey");
+
+ Mockito.when(otpProvider.computeOtp(Mockito.anyString(),Mockito.anyInt(),Mockito.anyString())).thenReturn("123456");
+ OtpGeneratorResponseDto otp = otpGeneratorService.getOtp(otpGeneratorRequestDto);
+ Assert.assertEquals(otp.getOtp(),"123456");
+ Assert.assertEquals(otp.getStatus(),"GENERATION_SUCCESSFUL");
+ }
+}
diff --git a/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidatorServiceTest.java b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidatorServiceTest.java
new file mode 100644
index 00000000..ce81a237
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/service/OtpValidatorServiceTest.java
@@ -0,0 +1,119 @@
+package io.mosip.kernel.otpmanager.test.service;
+
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+
+import io.mosip.kernel.otpmanager.service.PersistenceService;
+import io.mosip.kernel.otpmanager.service.impl.OtpValidatorServiceImpl;
+import io.mosip.kernel.otpmanager.util.OtpManagerUtils;
+import io.mosip.kernel.otpmanager.util.OtpProvider;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import io.mosip.kernel.otpmanager.entity.OtpEntity;
+
+@RunWith(SpringRunner.class)
+public class OtpValidatorServiceTest {
+
+
+ @Mock
+ PersistenceService persistenceService;
+
+ @Mock
+ OtpProvider provider;
+
+ @Mock
+ OtpManagerUtils otpManagerUtils;
+
+ @InjectMocks
+ OtpValidatorServiceImpl otpValidatorService;
+
+
+ @Test
+ public void testOtpValidatorServiceWhenMaxAttemptReached() throws Exception {
+ ReflectionTestUtils.setField(otpValidatorService,"activeProfile","main");
+ ReflectionTestUtils.setField(otpValidatorService,"otpExpiryLimit","2000");
+ ReflectionTestUtils.setField(otpValidatorService,"numberOfValidationAttemptsAllowed","3");
+ OtpEntity entity = new OtpEntity();
+ entity.setOtp("1234");
+ entity.setId("12345");
+ entity.setValidationRetryCount(3);
+ entity.setStatusCode("OTP_UNUSED");
+ entity.setValidationRetryCount(0);
+ entity.setUpdatedDtimes(LocalDateTime.now());
+ Mockito.when(persistenceService.findOtpByKey(Mockito.anyString())).thenReturn(entity);
+ otpValidatorService.validateOtp("12345","123456");
+ }
+
+ @Test
+ public void testOtpValidatorServiceWhenKeyFreezedPositiveCase() throws Exception {
+ ReflectionTestUtils.setField(otpValidatorService,"activeProfile","main");
+ ReflectionTestUtils.setField(otpValidatorService,"otpExpiryLimit","20000");
+ ReflectionTestUtils.setField(otpValidatorService,"numberOfValidationAttemptsAllowed","1");
+ OtpEntity entity = new OtpEntity();
+ entity.setOtp("1234");
+ entity.setId("testKey");
+ entity.setValidationRetryCount(0);
+ entity.setStatusCode("KEY_FREEZED");
+ entity.setUpdatedDtimes(LocalDateTime.now(ZoneId.of("UTC")).minus(1, ChronoUnit.MINUTES));
+ Mockito.when(persistenceService.findOtpByKey(Mockito.anyString())).thenReturn(entity);
+ otpValidatorService.validateOtp("12345","123456");
+ }
+
+ @Test
+ public void testOtpValidatorServiceWhenKeyFreezedPostiveCase() throws Exception {
+ ReflectionTestUtils.setField(otpValidatorService,"activeProfile","main");
+ ReflectionTestUtils.setField(otpValidatorService,"otpExpiryLimit","20000");
+ ReflectionTestUtils.setField(otpValidatorService,"numberOfValidationAttemptsAllowed","0");
+ ReflectionTestUtils.setField(otpValidatorService,"keyFreezeDuration","0");
+ OtpEntity entity = new OtpEntity();
+ entity.setOtp("1234");
+ entity.setId("12345");
+ entity.setValidationRetryCount(0);
+ entity.setStatusCode("KEY_FREEZED");
+ entity.setUpdatedDtimes(LocalDateTime.now(ZoneId.of("UTC")));
+ Mockito.when(persistenceService.findOtpByKey(Mockito.anyString())).thenReturn(entity);
+ otpValidatorService.validateOtp("12345","1234");
+ }
+
+ @Test
+ public void testOtpValidatorServiceWhenKeyUnUsedNegativeCase() throws Exception {
+ ReflectionTestUtils.setField(otpValidatorService,"activeProfile","main");
+ ReflectionTestUtils.setField(otpValidatorService,"otpExpiryLimit","20000");
+ ReflectionTestUtils.setField(otpValidatorService,"numberOfValidationAttemptsAllowed","0");
+ ReflectionTestUtils.setField(otpValidatorService,"keyFreezeDuration","0");
+ OtpEntity entity = new OtpEntity();
+ entity.setOtp("1234");
+ entity.setId("12345");
+ entity.setValidationRetryCount(0);
+ entity.setStatusCode("OTP_UNUSED");
+ entity.setUpdatedDtimes(LocalDateTime.now(ZoneId.of("UTC")));
+ Mockito.when(persistenceService.findOtpByKey(Mockito.anyString())).thenReturn(entity);
+ otpValidatorService.validateOtp("12345","1234");
+ }
+
+ @Test
+ public void testOtpValidatorServiceWithLocalProfile() throws Exception {
+
+ ReflectionTestUtils.setField(otpValidatorService,"otpExpiryLimit","20000");
+ ReflectionTestUtils.setField(otpValidatorService,"numberOfValidationAttemptsAllowed","0");
+ ReflectionTestUtils.setField(otpValidatorService,"activeProfile","local");
+ ReflectionTestUtils.setField(otpValidatorService,"localOtp","111111");
+ OtpEntity entity = new OtpEntity();
+ entity.setOtp("1234");
+ entity.setId("12345");
+ entity.setValidationRetryCount(0);
+ entity.setStatusCode("OTP_UNUSED");
+ entity.setUpdatedDtimes(LocalDateTime.now(ZoneId.of("UTC")));
+ Mockito.when(persistenceService.findOtpByKey(Mockito.anyString())).thenReturn(entity);
+ otpValidatorService.validateOtp("12345","1234");
+ entity.setOtp("111111");
+ otpValidatorService.validateOtp("12345","111111");
+ }
+}
diff --git a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/util/OtpProviderTest.java b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/util/OtpProviderTest.java
similarity index 92%
rename from kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/util/OtpProviderTest.java
rename to kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/util/OtpProviderTest.java
index 24420fd3..71817094 100644
--- a/kernel/kernel-otpmanager-service/src/test/java/io/mosip/kernel/otpmanager/test/util/OtpProviderTest.java
+++ b/kernel/kernel-otpmanager/src/test/java/io/mosip/kernel/otpmanager/test/util/OtpProviderTest.java
@@ -1,24 +1,24 @@
-package io.mosip.kernel.otpmanager.test.util;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-import io.mosip.kernel.otpmanager.exception.CryptoFailureException;
-import io.mosip.kernel.otpmanager.util.OtpProvider;
-
-@SpringBootTest
-@RunWith(SpringRunner.class)
-public class OtpProviderTest {
-
- @Autowired
- private OtpProvider provider;
-
- @Test(expected = CryptoFailureException.class)
- public void getSigningExceptionTest() {
- provider.computeOtp("98989898999", 6, "nsjkbdcdj");
- }
-
-}
+package io.mosip.kernel.otpmanager.test.util;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import io.mosip.kernel.otpmanager.exception.CryptoFailureException;
+import io.mosip.kernel.otpmanager.util.OtpProvider;
+
+@RunWith(SpringRunner.class)
+public class OtpProviderTest {
+
+ @InjectMocks
+ private OtpProvider provider;
+
+ @Test(expected = CryptoFailureException.class)
+ public void getSigningExceptionTest() {
+ provider.computeOtp("98989898999", 6, "nsjkbdcdj");
+ }
+
+}
diff --git a/kernel/kernel-otpmanager/src/test/resources/application.properties b/kernel/kernel-otpmanager/src/test/resources/application.properties
new file mode 100644
index 00000000..3b284ad5
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/resources/application.properties
@@ -0,0 +1,66 @@
+# In Memory DB For Test
+#--------------------------------------
+#The Driver name for test DB.
+javax.persistence.jdbc.driver=org.h2.Driver
+#The URL for test DB.
+javax.persistence.jdbc.url=jdbc:h2\:mem\:testdb;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS kernel
+#The username for test DB.
+javax.persistence.jdbc.user=sa
+#The password for test DB.
+javax.persistence.jdbc.password=
+
+# Hibernate properties
+#-------------------------------------
+#It automatically validates or exports schema DDL to the database when the SessionFactory is created.
+hibernate.hbm2ddl.auto=create-drop
+#It makes Hibernate to generate the appropriate SQL statements for the chosen database.
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+#It enables/disables the logging of all the generated SQL statements to the console.
+hibernate.show_sql=false
+#It enables/disables formatting the generated SQL statement to make it more readable.
+hibernate.format_sql=false
+#It sets the default encoding to UTF8.
+hibernate.connection.charSet=utf8
+#It enables/disables L2 caching.
+hibernate.cache.use_second_level_cache=false
+#It enables/disables query caching.
+hibernate.cache.use_query_cache=false
+#It specifies whether entries will be written in a readable format or not in the L2 cache.
+hibernate.cache.use_structured_entries=false
+#It is used to analyze performance issues.
+hibernate.generate_statistics=false
+
+#OTP Properties
+#-------------------------------
+#the default length for otp(in number)
+mosip.kernel.otp.default-length=6
+#the default crypto function
+#It can be: HmacSHA512, HmacSHA256, HmacSHA1.
+mosip.kernel.otp.mac-algorithm=HmacSHA512
+#the default shared key
+mosip.kernel.otp.shared-key=123456
+#the OTP expires after the given time(in seconds).
+mosip.kernel.otp.expiry-time=40
+#the key is freezed for the given time(in seconds).
+mosip.kernel.otp.key-freeze-time=40
+#the number of validation attempts allowed(in number).
+#mosip.kernel.otp.validation-attempt-threshold =3 means , the validation and generation will be blocked from 4th time.
+mosip.kernel.otp.validation-attempt-threshold=3
+#minimum length of key(in number).
+mosip.kernel.otp.min-key-length=3
+#maximum length of key(in number).
+mosip.kernel.otp.max-key-length=255
+mosip.kernel.auth.proxy-otp=false
+mosip.kernel.auth.proxy-otp-value=111111
+
+## To disable the logging (spring boot)
+logging.level.org.springframework=OFF
+logging.level.root=OFF
+spring.main.banner-mode=off
+
+mosip.role.kernel.postotpgenerate=INDIVIDUAL,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ID_AUTHENTICATION,AUTH,RESIDENT,REGISTRATION_OFFICER
+mosip.role.kernel.getotpvalidate=INDIVIDUAL,REGISTRATION_ADMIN,REGISTRATION_SUPERVISOR,ID_AUTHENTICATION,AUTH,RESIDENT,REGISTRATION_OFFICER
+
+mosip.auth.adapter.impl.basepackage=io.mosip.kernel.auth.defaultadapter
+auth.server.validate.url=http://localhost:8091/v1/authmanager/authorize/admin/validateToken
+mosip.kernel.auth.appids.realm.map={prereg:'preregistration',ida:'mosip',registrationclient:'mosip',regproc:'mosip',partner:'mosip',resident:'mosip',admin:'mosip',crereq:'mosip',creser:'mosip',datsha:'mosip'}
diff --git a/kernel/kernel-otpmanager/src/test/resources/bootstrap.properties b/kernel/kernel-otpmanager/src/test/resources/bootstrap.properties
new file mode 100644
index 00000000..293878bc
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/resources/bootstrap.properties
@@ -0,0 +1,64 @@
+# Spring properties
+#----------------------------------------------------------------
+spring.cloud.config.uri=localhost
+spring.cloud.config.label=master
+spring.cloud.config.name=kernel
+spring.application.name=kernel-otpmanager-service
+spring.profiles.active=test
+management.endpoints.web.exposure.include=refresh
+#management.security.enabled=false
+
+# Server properties
+#------------------------------------------------------------------------------------------------
+#server port
+server.port=8085
+#servlet path
+server.servlet.path=/otpmanager
+#disabling health check so that client doesnt try to load properties from sprint config server every
+# 5 minutes (should not be done in production)
+health.config.enabled=false
+
+# In Memory DB For Test
+#--------------------------------------
+#The Driver name for test DB.
+javax.persistence.jdbc.driver=org.h2.Driver
+#The URL for test DB.
+javax.persistence.jdbc.url=jdbc:h2\:mem\:testdb;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS kernel
+#The username for test DB.
+javax.persistence.jdbc.user=sa
+#The password for test DB.
+javax.persistence.jdbc.password=
+
+# Hibernate properties
+#-------------------------------------
+#It automatically validates or exports schema DDL to the database when the SessionFactory is created.
+hibernate.hbm2ddl.auto=create-drop
+#It makes Hibernate to generate the appropriate SQL statements for the chosen database.
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+#It enables/disables the logging of all the generated SQL statements to the console.
+hibernate.show_sql=false
+#It enables/disables formatting the generated SQL statement to make it more readable.
+hibernate.format_sql=false
+#It sets the default encoding to UTF8.
+hibernate.connection.charSet=utf8
+#It enables/disables L2 caching.
+hibernate.cache.use_second_level_cache=false
+#It enables/disables query caching.
+hibernate.cache.use_query_cache=false
+#It specifies whether entries will be written in a readable format or not in the L2 cache.
+hibernate.cache.use_structured_entries=false
+#It is used to analyze performance issues.
+hibernate.generate_statistics=false
+
+openapi.info.title=OTP Manager Service
+openapi.info.description=Rest Endpoints for operations related to OTP
+openapi.info.version=1.0
+openapi.info.license.name=Mosip
+openapi.info.license.url=https://docs.mosip.io/platform/license
+mosipbox.public.url=http://localhost:${server.port}
+openapi.service.servers[0].url=${mosipbox.public.url}${server.servlet.path}
+openapi.service.servers[0].description=OTP Manager Service
+springdoc.swagger-ui.disable-swagger-default-url=true
+spring.mvc.servlet.path=${server.servlet.path}
+
+
diff --git a/kernel/kernel-otpmanager/src/test/resources/logback.xml b/kernel/kernel-otpmanager/src/test/resources/logback.xml
new file mode 100644
index 00000000..7285a15d
--- /dev/null
+++ b/kernel/kernel-otpmanager/src/test/resources/logback.xml
@@ -0,0 +1,10 @@
+
+
+
+ %d [%t] %p [%C{1}].%M.%L : %m%n
+
+
+
+
+
+
\ No newline at end of file
diff --git a/kernel/pom.xml b/kernel/pom.xml
index d03b27b2..4865bace 100644
--- a/kernel/pom.xml
+++ b/kernel/pom.xml
@@ -44,6 +44,7 @@
kernel-otpmanager-service
+ kernel-otpmanager