diff --git a/common/pom.xml b/common/pom.xml
index 8e6772d..290f33a 100644
--- a/common/pom.xml
+++ b/common/pom.xml
@@ -1,128 +1,134 @@
- 4.0.0
-
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+
+ com.mfsys
+ parent
+ 0.0.1
+ ../parent/pom.xml
+
com.mfsys
- parent
+ common
0.0.1
- ../parent/pom.xml
-
- com.mfsys
- common
- 0.0.1
- common
- GBRSP Project
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 21
-
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- org.modelmapper
- modelmapper
- 3.1.1
-
-
- org.springframework.boot
- spring-boot-starter-security
-
-
- org.springframework.boot
- spring-boot-starter-web
-
+ common
+ GBRSP Project
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 21
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.modelmapper
+ modelmapper
+ 3.1.1
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
-
- org.projectlombok
- lombok
- true
-
-
- org.springframework.boot
- spring-boot-starter-tomcat
- provided
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.security
- spring-security-test
- test
-
-
- mysql
- mysql-connector-java
- 8.0.33
-
-
- org.mindrot
- jbcrypt
- 0.4
-
-
- io.jsonwebtoken
- jjwt-api
- 0.12.3
-
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+ org.mindrot
+ jbcrypt
+ 0.4
+
+
+ io.jsonwebtoken
+ jjwt-api
+ 0.12.6
+
+
+ io.jsonwebtoken
+ jjwt-impl
+ 0.12.6
+
+
+ io.jsonwebtoken
+ jjwt-jackson
+ 0.12.6
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ api.CoreAPI
+ EncryptionAPI
+ 0.0.1-SNAPSHOT
+
+
+ jakarta.xml.bind
+ jakarta.xml.bind-api
+ provided
+
-
- io.jsonwebtoken
- jjwt-impl
- 0.12.3
- runtime
-
+
-
- io.jsonwebtoken
- jjwt-jackson
- 0.12.3
- runtime
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
-
-
-
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.13.0
-
- 21
- 21
-
-
- org.projectlombok
- lombok
- 1.18.34
-
-
-
-
-
-
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+ 21
+ 21
+
+
+ org.projectlombok
+ lombok
+ 1.18.34
+
+
+
+
+
+
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/PropertyConstant.java b/common/src/main/java/com/mfsys/common/configuration/constant/PropertyConstant.java
deleted file mode 100644
index 0af96c5..0000000
--- a/common/src/main/java/com/mfsys/common/configuration/constant/PropertyConstant.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.mfsys.common.configuration.constant;
-
-public interface PropertyConstant {
-
-}
diff --git a/common/src/main/java/com/mfsys/common/configuration/service/JwtService.java b/common/src/main/java/com/mfsys/common/configuration/service/JwtService.java
deleted file mode 100644
index 83eca6e..0000000
--- a/common/src/main/java/com/mfsys/common/configuration/service/JwtService.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.mfsys.common.configuration.service;
-
-import io.jsonwebtoken.Claims;
-import io.jsonwebtoken.JwtException;
-import io.jsonwebtoken.Jwts;
-import io.jsonwebtoken.security.Keys;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-
-import javax.crypto.SecretKey;
-import java.security.Key;
-import java.time.Instant;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.function.Function;
-
-@Service
-public class JwtService {
-
- @Value("${jwt.secret}")
- private String secret;
-
- @Value("${jwt.expiration}")
- private Long expiration;
-
- @Value("${jwt.refresh-expiration}")
- private Long refreshExpiration;
-
- public String extractUsername(String token) {
- return extractClaim(token, Claims::getSubject);
- }
-
- public Date extractExpiration(String token) {
- return extractClaim(token, Claims::getExpiration);
- }
-
- public T extractClaim(String token, Function claimsResolver) {
- final Claims claims = extractAllClaims(token);
- return claimsResolver.apply(claims);
- }
-
- private Claims extractAllClaims(String token) {
- try {
- return Jwts.parser()
- .verifyWith((SecretKey) getSigningKey())
- .build()
- .parseSignedClaims(token)
- .getPayload();
- } catch (JwtException e) {
- throw new RuntimeException("Invalid JWT token", e);
- }
- }
-
- private Boolean isTokenExpired(String token) {
- return extractExpiration(token).before(new Date());
- }
-
- public String generateToken(String subject) {
- Map claims = new HashMap<>();
- return createToken(claims, subject, expiration);
- }
-
- public String generateRefreshToken(String subject) {
- Map claims = new HashMap<>();
- return createToken(claims, subject, refreshExpiration);
- }
-
- private String createToken(Map claims, String subject, Long expiration) {
- Instant now = Instant.now();
- return Jwts.builder()
- .claims(claims)
- .subject(subject)
- .issuedAt(Date.from(now))
- .expiration(Date.from(now.plusMillis(expiration)))
- .signWith(getSigningKey())
- .compact();
- }
-
- public Boolean validateToken(String token, String subject) {
- final String username = extractUsername(token);
- return (username.equals(subject) && !isTokenExpired(token));
- }
-
- public Boolean isTokenValid(String token) {
- try {
- return !isTokenExpired(token);
- } catch (Exception e) {
- return false;
- }
- }
-
- private Key getSigningKey() {
- byte[] keyBytes = secret.getBytes();
- return Keys.hmacShaKeyFor(keyBytes);
- }
-}
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java b/common/src/main/java/com/mfsys/constant/AconnectURI.java
similarity index 97%
rename from common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java
rename to common/src/main/java/com/mfsys/constant/AconnectURI.java
index 2cc905b..4442c05 100644
--- a/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java
+++ b/common/src/main/java/com/mfsys/constant/AconnectURI.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.constant;
+package com.mfsys.constant;
public interface AconnectURI {
String REFRESH_TOKEN = "/refreshtoken";
diff --git a/common/src/main/java/com/mfsys/constant/CustomerStatus.java b/common/src/main/java/com/mfsys/constant/CustomerStatus.java
new file mode 100644
index 0000000..447733b
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/CustomerStatus.java
@@ -0,0 +1,8 @@
+package com.mfsys.constant;
+
+public interface CustomerStatus {
+
+ String CUSTOMER_UNVERIFIED = "Unverified";
+ String CUSTOMER_VERIFIED = "Verified";
+ String CUSTOMER_ACTIVE = "Active";
+}
diff --git a/common/src/main/java/com/mfsys/constant/DBFieldNameConstant.java b/common/src/main/java/com/mfsys/constant/DBFieldNameConstant.java
new file mode 100644
index 0000000..1a70d93
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/DBFieldNameConstant.java
@@ -0,0 +1,7 @@
+package com.mfsys.constant;
+
+public interface DBFieldNameConstant {
+
+ String POR_ORGACODE = "POR_ORGACODE";
+ String PCR_CURRCODE = "PCR_CURRCODE";
+}
diff --git a/common/src/main/java/com/mfsys/constant/DateFormatterConstant.java b/common/src/main/java/com/mfsys/constant/DateFormatterConstant.java
new file mode 100644
index 0000000..a07b0c7
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/DateFormatterConstant.java
@@ -0,0 +1,7 @@
+package com.mfsys.constant;
+
+public interface DateFormatterConstant {
+ String DATE_FORMAT = "yyyy-MM-dd";
+ String TIME_FORMAT = "T00:00:00.000Z";
+ String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java b/common/src/main/java/com/mfsys/constant/ERRCode.java
similarity index 78%
rename from common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java
rename to common/src/main/java/com/mfsys/constant/ERRCode.java
index 423ae36..e2c8697 100644
--- a/common/src/main/java/com/mfsys/common/configuration/constant/ERRCode.java
+++ b/common/src/main/java/com/mfsys/constant/ERRCode.java
@@ -1,6 +1,6 @@
-package com.mfsys.common.configuration.constant;
+package com.mfsys.constant;
-import com.mfsys.common.configuration.exception.ErrorMessage;
+import com.mfsys.exception.ErrorMessage;
public enum ERRCode implements ErrorMessage {;
private String code;
diff --git a/common/src/main/java/com/mfsys/constant/ErrorMessage.java b/common/src/main/java/com/mfsys/constant/ErrorMessage.java
new file mode 100644
index 0000000..79f53c2
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/ErrorMessage.java
@@ -0,0 +1,6 @@
+package com.mfsys.constant;
+
+public interface ErrorMessage {
+ public String getCode();
+ public String getDescription();
+}
diff --git a/common/src/main/java/com/mfsys/constant/FieldNameConstant.java b/common/src/main/java/com/mfsys/constant/FieldNameConstant.java
new file mode 100644
index 0000000..4378948
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/FieldNameConstant.java
@@ -0,0 +1,151 @@
+package com.mfsys.constant;
+
+public enum FieldNameConstant implements DBFieldNameConstant {
+
+ PTR_TRANCODE("ptrTrancode", "PTR_TRANCODE"), PTR_TRANDESC("ptrTrandesc", "PTR_TRANDESC"),POR_ORGACODE("porOrgacode", DBFieldNameConstant.POR_ORGACODE),
+ SUS_USERCODE("susUsercode", "SUS_USERCODE"), SUS_NAME("susName", "SUS_NAME"), PCR_CURRCODE("pcrCurrcode", "PCR_CURRCODE"), PCR_CURRBASE("pcrCurrbase", "PCR_CURRBASE"),
+ SGT_GNTRAMTFC("sgtGntramtfc", "SGT_GNTRAMTFC"),PLC_LOCACODE("plcLocacode", "PLC_LOCACODE"),
+ SGT_GNTRVALUEDATE("sgtGntrvaluedate", "SGT_GNTRVALUEDATE"), MBM_BKMSNUMBER("mbmBkmsnumber","MBM_BKMSNUMBER"),MBM_BKMSCLOSED("mbmBkmsclosed","MBM_BKMSCLOSED"), MBM_BKMSTITLE("mbmBkmstitle","MBM_BKMSTITLE"),
+ DMP_PRODCODE("dmpProdcode", "DMP_PRODCODE"), MLT_LNTRPRINCIPAL("mltLntrprincipal","MLT_LNTRPRINCIPAL"),
+ MLT_LNTRINTEREST("mltLntrinterest","MLT_LNTRINTEREST"), MLT_LNTRPENALTY("mltLntrpenalty","MLT_LNTRPENALTY"),
+ SGT_GNTRNARRATION("sgtGntrnarration", "SGT_GNTRNARRATION"), BLA_LNACFINANCEDAMTFC("blaLnacfinancedamtfc","BLA_LNACFINANCEDAMTFC"),
+ BLA_LNACDISBURSEMENTFC("blaLnacdisbursementfc","BLA_LNACDISBURSEMENTFC"),DMP_PRODDESC("dmpProddesc","DMP_PRODDESC"),
+ PER_ERATRATEACT("perEratrateact","PER_ERATRATEACT"),PCR_CURRDESC("pcrCurrdesc","PCR_CURRDESC"),PLC_LOCADESC("plcLocadesc","PLC_LOCADESC"),
+ PLC_LOCASHORT("plcLocashort", "PLC_LOCASHORT"), PLC_LOCATYPE("plcLocatype", "PLC_LOCATYPE"), PRG_REGNCODE("prgRegncode","PRG_REGNCODE"),
+ PLC_OPENDATE("plcOpendate","PLC_OPENDATE"), BRANCH_DATA("branchStep", "BRANCH_STEP"), CHARGES_BIFURCATION("chargesBifurcation", "CHARGES_BIFURCATION"),
+ CMP_CUSTCODE("cmpCustcode", "CMP_CUSTCODE"),CMP_CUSTSEX("cmpcustsex","CMP_CUSTSEX"), CMP_GRPOUPCODE("cmpGrpoupcode","CMP_GRPOUPCODE"), PCC_CSCGCODE("pccCscgcode","PCC_CSCGCODE"),
+ PFS_FUSOID("pfsFusoid", "PFS_FUSOID"), PAT_AMTYCODE("patAmtycode","PAT_AMTYCODE"), BLA_LNMBSHARE_APPROVED("blaLnmbshareApproved","BLA_LNMBSHARE_APPROVED"),
+ BLA_ASSOCIATECUSTOMER("blaAssociatecustomer","BLA_ASSOCIATECUSTOMER"), CMP_CUSTCODE_GRP("cmpCustcodeGrp","CMP_CUSTCODE_GRP"),
+ CORRELATION_CUSTCODE("correlationCustcode","CORRELATION_CUSTCODE"),
+ CMP_COMPANYCODE("cmpCompanycode", "CMP_COMPANYCODE"), CMP_COMPANYCODE_REF("cmpCompanycodeRef","CMP_COMPANYCODE_REF"),
+ CMP_COMPANYNAME("cmpCompanyname", "CMP_COMPANYNAME"),
+ CMP_JOINTCUSTCODE("cmpJointcustcode", "CMP_JOINTCUSTCODE"),
+ PAS_ACSTCODE("pasAcstcode","PAS_ACSTCODE"),BDA_DPACBLOCKAMT("bdaDpacblockamt","BDA_DPACBLOCKAMT"), BDA_DPACPROFITACCRUEDAMTFC("bdaDpacprofitaccruedamtfc","BDA_DPACPROFITACCRUEDAMTFC"),
+ MLS_LNSHTYPE("mlsLnshtype","MLS_LNSHTYPE"),MLS_LNSHINSTNO("mlsLnshinstno","MLS_LNSHINSTNO"),MLS_LNSHDUEDATE("mlsLnshduedate","MLS_LNSHDUEDATE"),
+ MLS_LNSHPRINCIPAL("mlsLnshprincipal","MLS_LNSHPRINCIPAL"),MLS_LNSHINTEREST("mlsLnshinterest","MLS_LNSHINTEREST"),BLA_LNAPPROVEDAMOUNTFC("blaLnapprovedamountfc","BLA_LNAPPROVEDAMOUNTFC"),
+ BLA_LNACAPPROVEDATE("blaLnacapprovedate", "BLA_LNACAPPROVEDATE"),
+ CLOSING_DETAILS("closingBalanceDetails",""),WORKFLOWREFNUM("workFlowRefNum", "workFlowRefNum"),
+ PIN_LENGTH("4","pinLength"),POR_ORGADESC("porOrgadesc","POR_ORGADESC"),POR_ORGASHORT("porOrgashort","POR_ORGASHORT"),
+ POR_ORGAREGDATE("porOrgaregdate","POR_ORGAREGDATE"), POR_ORGALOGO("porOrgalogo","POR_ORGALOGO"),POR_ORGAREPORTLOGO("porOrgareportlogo","POR_ORGAREPORTLOGO"), POR_TRANINTEGRALVALUE("porTranintegralvalue", "POR_TRANINTEGRALVALUE"), POR_TRANPRECISIONVALUE("porTranrprecisionvalue", "POR_TRANPRECISIONVALUE"),
+ POR_TRANROUNDTYPE("porTranroundtype", "POR_TRANROUNDTYPE"), POR_ROUNDINGMODETRANSACTION("porRoundingmodetransactions","POR_ROUNDINGMODETRANSACTION"),
+ POR_ORGAEXPDATE("porOrgaexpdate","POR_ORGAEXPDATE"),POR_ORGAFAX("porOrgafax","POR_ORGAFAX"),POR_ADRSLNDPHONE("porAdrslndphone","POR_ADRSLNDPHONE"),POR_ORGAADDRESSLINE1("por_orgaaddressline1","POR_ORGAADDRESSLINE1"),
+ POR_ORGAADDRESSLINE2("por_orgaaddressline2","POR_ORGAADDRESSLINE2"),POR_ORGAWEBSITE("porOrgawebsite","POR_ORGAWEBSITE"), POR_ORGACODE_ENTRY("porOrgacodeEntry", "POR_ORGACODE_ENTRY"), POR_ACTIVE("porActive", "POR_ACTIVE"),
+ SUS_USERNAME("susUsername", "SUS_USERNAME"),SUS_PASSWORD("susPassword", "SUS_PASSWORD"),SUS_USERCELLNO("susUsercellno", "SUS_USERCELLNO"),SUL_LEVELCODE("sulLevelCode", "SUL_LEVELCODE"),SUL_DESC("sulDesc", "SUL_DESC"),SUL_STATUS("sulStatus", "SUL_STATUS")
+ ,SUS_MULTILOGIN("susMultilogin","SUS_MULTILOGIN") , SUS_HOMELOCATION("susHomelocation","SUS_HOMELOCATION"),SUS_ACTIVE("susActive", "SUS_ACTIVE"), SUS_SIGNLOG("susSignlog","SUS_SIGNLOG"), USER_DATA("userStep","USER_STEP"),ROLE_DATA("roleStep", "ROLE_STEP"),PCA_GLACDEBIT("pcaGlacdebit","PCA_GLACDEBIT"),PCA_GLACCREDIT("pcaGlaccredit","PCA_GLACCREDIT"),PCH_CHRGCODE("pchChrgcode","PCH_CHRGCODE"),PCH_CHRGDESC("pchChrgdesc","PCH_CHRGDESC"),
+ PET_EVENTCODE_POST("petEventcodePost","PET_EVENTCODE_POST"), PET_EXRTCODE("petExrtcode","PET_EXRTCODE"), PER_ERATDATE("perEratdate","PER_ERATDATE"), PLT_LOCATYPEDESC("pltLocatypedesc", "PLT_LOCATYPEDESC"), CMP_CREATEDBY("cmpCreatedby", "CMP_CREATEDBY"), PLC_LOCACODE_ENTRY("PLC_LOCACODE_ENTRY", "PLC_LOCACODE_ENTRY"),
+ POR_ORGATIMEZONE("porOrgatimezone", "POR_ORGATIMEZONE"), POR_ORGAUTCTIMEZONE("porOrgautctimezone", "POR_ORGAUTCTIMEZONE"),PLC_LOCATIMEZONE("plcLocatimezone", "PLC_LOCATIMEZONE"), PLC_ACTIVE("plcActive","PLC_ACTIVE"),
+ PCA_GLACCODE("pcaGlaccode", "PCA_GLACCODE"), SGT_GNTRDATE("sgtGntrdate", "SGT_GNTRDATE"), SGT_GNTRAMT("sgtGntramt", "SGT_GNTRAMT"),
+ PFS_ACNTDATEFROM("pfs_acntdatefrom","PFS_ACNTDATEFROM"), PFS_ACNTDATETO("pfs_acntdateto", "PFS_ACNTDATETO"), PFS_ACNTDESC("pfs_acntdesc","PFS_ACNTDESC"),
+ BGP_GLPRCOMPANYDATE("bgpGlprcompanydate","BGP_GLPRCOMPANYDATE"),BGP_GLPRCOMPANYTIMEZONE("bgpGlprcompanytimezone","BGP_GLPRCOMPANYDATE"), BGP_GLPROPERATIONCLOSE("bgpGlproperationclose", "BGP_GLPROPERATIONCLOSE"),
+ BGP_GLPRNEXTDATE("bgpGlprnextdate", "BGP_GLPRNEXTDATE"), PCO_CLDSTATUS("pcoCldstatus", "PCO_CLDSTATUS"), PCO_CLDSHADOWED("pcoCldshadowed", "PCO_CLDSHADOWED"),
+ PCO_CLDBATCHPROCESS("pcoCldbatchprocess", "PCO_CLDBATCHPROCESS"), PCO_CLDERRMESSAGE("pcoClderrmessage", "PCO_CLDERRMESSAGE"),
+ BLA_LNAPPLIEDAMOUNTFC ("blaLnappliedamountfc","BLA_LNAPPLIEDAMOUNTFC"), TRANSACTION_DESCRIPTION("transactionDescription","TRANSACTION_DESCRIPTION"),
+ BLA_LNACINTERESTRATE("blaLnacinterestrate","BLA_LNACINTERESTRATE"), PCD_CORDCODE("pcdCordcode","PCD_CORDCODE"),PPO_PURPCODE("ppoPurpcode","PPO_PURPCODE"), OLD_PCD_CORDCODE("oldPcdCordcode","OLD_PCD_CORDCODE"),
+ NEW_PCD_CORDCODE("newPcdCordcode","NEW_PCD_CORDCODE"), PCD_CORDCOMMENT ("pcdCordcomment","PCD_CORDCOMMENT"), TRANSACTION_TIME("transactionTime","TRANSACTION_TIME"),
+ SGT_GNTRNUMBER("sgtGntrnumber", "SGT_GNTRNUMBER"), SGT_GNTRTRANLINK("sgtGntrtranlink", "SGT_GNTRTRANLINK"), SGT_GNTRCREATEDAT("sgtGntrcreatedat", "SGT_GNTRCREATEDAT"),
+ BTA_BOOKINGAMOUNT("btaBookingamount", "BTA_BOOKINGAMOUNT"), BTA_DURATION("btaDuration", "BTA_DURATION"), PFM_FMODCODE("pfmFmodcode", "PFM_FMODCODE"), PRO_RLOVCODE("proRlovcode", "PRO_RLOVCODE"),
+ PTM_TMETCODE("ptmTmetcode", "PTM_TMETCODE"), PTM_TMETDESC("ptmTmetdesc", "PTM_TMETDESC"), PLC_CHARGECALCRATE("plcChargecalcrate", "PLC_CHARGECALCRATE"),
+ SVH_VCHDUPDATETIMESTAMP("svhVchdupdatetimestamp","SVH_VCHDUPDATETIMESTAMP"), SVH_VCHDFLDCOMB("svhVchdfldcomb", "SVH_VCHDFLDCOMB"), SVH_VCHDVALCOMBDESC("svhVchdvalcombdesc", "SVH_VCHDVALCOMBDESC"), PAA_TAAUTIMESTAMP("paaTaautimestamp", "PAA_TAAUTIMESTAMP"),
+ MBM_BKMSBALANCE("mbmBkmsbalance", "MBM_BKMSBALANCE"), MBM_BKMSUNAUTHDRBALANCE("mbmBkmsunauthdrbalance", "MBM_BKMSUNAUTHDRBALANCE"), MBM_BKMSUNAUTHCRBALANCE("mbmBkmsunauthcrbalance", "MBM_BKMSUNAUTHCRBALANCE"),
+ CURRENT_AMOUNT("currentAmount", "CURRENT_AMOUNT"), CURRENCY_DENOMINATION_DETIAL("currencyDenominationDetail", "currencyDenominationDetail"), CLOSE_OPERATION_DATA("closeOperationData", "closeOperationData"),
+ PCA_GLACOPITEM("pcaGlacopitem", "PCA_GLACOPITEM"), PCT_CALCODE("pctCalcode", "PCT_CALCODE"),
+ NODE_ID("nodeId", "NODE_ID"), SVV_VCVRREFNO("svvVcvrrefno", "SVV_VCVRREFNO"), PIT_INSTCODE("pitInstcode", "PIT_INSTCODE"), MIT_INSTCODE("mitInstcode", "MIT_INSTCODE"),
+ MIS_INSEBOOKNO("misInsebookno", "MIS_INSEBOOKNO"), PIS_INSTCODE("pisInstcode", "PIS_INSTCODE"), PIN_INVSCODE("pinInvscode", "PIN_INVSCODE"), MIS_INSERANGEFROM("misInserangefrom", "MIS_INSERANGEFROM"), MIS_INSERANGETO("misInserangeto", "MIS_INSERANGETO"),
+ MIS_INSERECVDATE("misInserecvdate", "MIS_INSERECVDATE"), MIS_INSEISSUEACNTDATE("misInseissueacntdate", "MIS_INSEISSUEACNTDATE"),
+ PPM_PYMDCODE("ppmPymdcode","PPM_PYMDCODE"),
+ SWITCH_CODE("switchCode","SWITCH_CODE"),
+ CRDR_CODE("crdrcode","CRDRCODE"),
+ ACCOUNT_TRA_NO("pcaGlaccodeAc","ACCOUNT_TRANSFER_NO"),
+ MBM_BKMSNUMBER_REF("mbmBkmsnumberRef","MBM_BKMSNUMBER_REF"),
+ DMP_PRODCODE_REF("dmpProdcodeRef","DMP_PRODCODE_REF"),
+ BLN_RESTRUCTUREPRINCIPALAMT("blnRestructureprincipalamt","BLN_RESTRUCTUREPRINCIPALAMT"),
+ BLA_LNACDISBURSEMENTDATE("bla_lnacdisbursementdate","BLA_LNACDISBURSEMENTDATE"),
+ PROCESS_COMPLETED("processCompleted","processCompleted"),
+ MIS_INSELOST( "MIS_INSELOST", "MIS_INSELOST"),
+ BATCH_USERCODE("@_CREATEUSER", "@_CREATEUSER"),
+ SGT_GNTRCREATEAT("sgtGntrcreateat", "SGT_GNTRCREATEAT"),
+ CMP_ACCOUNT_TITLE_FL("cmpAccountTitleFl","CMP_ACCOUNT_TITLE_FL"),
+ CMP_ACCOUNT_TITLE_LF("cmpAccountTitleLf","CMP_ACCOUNT_TITLE_LF"),
+ BN_CS_IT_IDENTIFIER("bnCsItIdentifier","BN_CS_IT_IDENTIFIER"),
+ CIT_IDENVALUE("citIdenValue","CIT_IDENVALUE"),
+ PIT_IDENCODE("pitIdenCode","PIT_IDENCODE"),
+ PHONE_NUMBER("phoneNumber","PHONE_NUMBER"),
+ BTA_AUTOROLLED("BtaAutorolled","BTA_AUTOROLLED"),
+
+ BLN_RESTRUCTUREADDITIONALAMT("blnRestructureadditionalamt","BLN_RESTRUCTUREADDITIONALAMT"),
+ CMP_BLACKLISTED("cmpBlacklisted", "CMP_BLACKLISTED"),
+ BGP_FRACTIONALSCALE("bgpFractionalscale", "BGP_FRACTIONALSCALE"),
+ BGP_BLACKLISTSETUP("bgpBlacklistsetup", "BGP_BLACKLISTSETUP"),
+ PLC_CHARGECALCRATE_ACCOUNT("plcChargecalcrateAccount", "PLC_CHARGECALCRATE_ACCOUNT"),
+ DST_STIERVALUE("dstStiervalueAccount","DST_STIERVALUE"),
+ DST_STIERVALUE_ACCOUNT("dstStiervalue","DST_STIERVALUE_ACCOUNT"),
+ BLA_ASSOCIATENAME("blaAssociatename","BLA_ASSOCIATENAME"),
+ ANR_ACNRCODE("anrAcnrcode", "ANR_ACNRCODE"),
+ BLG_CUSTCODE("blgCustcode", "BLG_CUSTCODE"),
+ RATE_AMOUNT("rateAmount","RATE_AMOUNT"),
+
+
+ PLC_ALLOWED_LOCA("plcallowedloca","PLC_ALLOWED_LOCA"),
+ PLC_AMOUNTFROM("plcamountfrom","PLC_AMOUNTFROM"),
+ PLC_AMOUNTTO("plcamountto","PLC_AMOUNTTO"),
+ PLC_CHARGECALCRATE_PRODUCT("plcchargecalcrateproduct","PLC_CHARGECALCRATE_PRODUCT"),
+ //Online Banking
+ CMP_CUSTPASSWORD("cmpCustpassword","CMP_CUSTPASSWORD"), CMP_CUSTSTATUS("cmpCuststatus", "CMP_CUSTSTATUS"), CMP_CUSTSTATUSDATE("cmpCuststatusdate", "CMP_CUSTSTATUSDATE"),
+ CMP_CUSTLASTLOGIN("cmpCustlastlogin", "CMP_CUSTLASTLOGIN"),
+ PCT_CSTYCODE("pctCstycode", "PCT_CSTYCODE"), CMP_FIRSTNAME("cmpFirstname", "CMP_FIRSTNAME"), CMP_LASTNAME("cmpLastname", "CMP_LASTNAME"),
+ PAD_ADRSMOBPHONE("padAdrsmobphone", "PAD_ADRSMOBPHONE"), PAD_ADRSEMAIL("padAdrsemail", "PAD_ADRSEMAIL"),
+ PAD_ADRSCORRESPONDENCE("padAdrscorrespondence", "PAD_ADRSCORRESPONDENCE"),
+ OCB_BENEFICIARYVERIFIED("ocbBeneficiaryverified", "OCB_BENEFICIARYVERIFIED"), OCB_BENEFICIARYVERIFYDATE("ocbBeneficiaryverifydate", "OCB_BENEFICIARYVERIFYDATE"),
+ PRC_CLASSIFICATION("prcClassification", "PRC_CLASSIFICATION"),
+ OTD_TRANSACTIONPOSTED("otdTransactionposted", "OTD_TRANSACTIONPOSTED"), OTD_TRANSACTIONPOSTDATE("otdTransactionpostdate", "OTD_TRANSACTIONPOSTDATE"),
+ OTD_TRANSACTIONID("otdTransactionid", "OTD_TRANSACTIONID"),
+
+ ORGANIZATION("organization", "ORGANIZATION"), LOCATION("location", "LOCATION"),
+ CURRENCY("currency", "CURRENCY"), GLOBALPARAMETER("globalparameter", "GLOBALPARAMETER"),
+ PCA_GLACODE_DEBIT("pcaGlacodeDebit","PCA_GLACODE_DEBIT"), PCA_GLACODE_CREDIT("pcaGlacodeCredit","PCA_GLACODE_CREDIT"),
+ PLC_APPLYACCRUAL("plcApplyaccrual", "PLC_APPLYACCRUAL"),
+ PFS_ACNTSTATUS("pfsAcntstatus","PFS_ACNTSTATUS"),
+ PRO_RLOVTONEWACCOUNT("proRlovtonewaccount", "PRO_RLOVTONEWACCOUNT"),
+ BBS_BATCHSTATUS("bbsBatchstatus", "BBS_BATCHSTATUS"), BBS_BATCHAMT("bbsBatchamt", "BBS_BATCHAMT"),
+ BLA_LNACGRACEPRINCIPLE("blaLnacgraceprinciple","BLA_LNACGRACEPRINCIPLE"),
+ BLA_LNACTOTALDURATION("blaLnactotalduration", "BLA_LNACTOTALDURATION"),
+ BLA_LNACEFFECTIVEDATE("blaLnaceffectivedate","BLA_LNACEFFECTIVEDATE"),
+ MLS_LNSHINSTTOTAL("mlsLnshinsttotal","MLS_LNSHINSTTOTAL"), SYSTEM_ORGA("SYSTEM_ORGA","SYSTEM_ORGA"), PLC_SUBLOCACODE("plcSublocacode","PLC_SUBLOCACODE"),
+ PLC_SUBLOCADESC("plcSublocadesc","PLC_SUBLOCADESC"),
+ ISC_AUTO_REVERSAL("iscAutoReversal", "ISC_AUTO_REVERSAL"),
+ MBM_NOTIFICATIONSERVICE("mbmNotificationService","MBM_NOTIFICATIONSERVICE"),
+ SERIAL_NO("serialNo" , "SERIAL_NO"), NOTIFICATION_STATUS("notificationStatus", "NOTIFICATION_STATUS"),
+ MESSAGE("Message", "MESSAGE"), SGT_GNTRDRCR("sgtGntrdrcr", "SGT_GNTRDRCR"), PIT_JOINTCUSTCODE("pitJoincustcode", "PIT_JOINTCUSTCODE"),
+ PCO_CTRYCODE("pcoCtrycode","PCO_CTRYCODE"), UDF3("prgntmUdf3","PR_GN_TM_UDF3"), UDF1("prgntmUdf1","PR_GN_TM_UDF1"), PFS_ACNTYEAR("pfsAcntyear","PFS_ACNTYEAR"), FROM_DATE("fromdate","FROM_DATE"), TO_DATE("todate","TO_DATE"),
+ STATUS_CODE("statusCode", "status_code"), TRANSACTION_NO("tranNo", "TRAN_NO"), TRANSACTION_DATE("tranDate", "TRAN_DATE"), TRANSACTION_AMOUNT("tranAmount", "TRAN_AMOUNT"),
+ CMP_IDENTIFICATION_NO("cmpIdentificationNo","CMP_IDENTIFICATION_NO"),
+ DEPOSIT("deposit","DEPOSIT"),
+ OTP_CODE("otpCode","OTP_CODE"),
+ IDEN_VALUE("idenValue", "IDEN_VALUE"),
+ PIT_IDENVALUE("pitIdenvalue", "PIT_IDENVALUE"),
+ PIT_IDENDESC("pit_idendesc", "PIT_IDENDESC"),
+ COMMISSION_AMOUNT("commissionAmount", "COMMISSION_AMOUNT"),
+ CMP_USERID("cmpUserId","CMP_USERID"),
+ COMPANY_NAME("companyName","COMPANY_NAME"),
+ OAUTH_FLAG("oauthFlag","OAUTH_FLAG")
+
+ ;
+
+
+ FieldNameConstant(String variableName, String dbFieldName) {
+ this.variableName = variableName;
+ this.dbFieldName = dbFieldName;
+ }
+
+ private final String variableName;
+ private final String dbFieldName;
+
+ public String getVariableName() {
+ return variableName;
+ }
+
+ public String getDbFieldName() {
+ return dbFieldName;
+ }
+
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/FieldNameLength.java b/common/src/main/java/com/mfsys/constant/FieldNameLength.java
similarity index 95%
rename from common/src/main/java/com/mfsys/common/configuration/constant/FieldNameLength.java
rename to common/src/main/java/com/mfsys/constant/FieldNameLength.java
index e473276..0b58876 100644
--- a/common/src/main/java/com/mfsys/common/configuration/constant/FieldNameLength.java
+++ b/common/src/main/java/com/mfsys/constant/FieldNameLength.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.constant;
+package com.mfsys.constant;
public interface FieldNameLength {
@@ -20,7 +20,7 @@ public interface FieldNameLength {
String CODE_200 = "VARCHAR(200)";
String CODE_500 = "VARCHAR(500)";
String CODE_1000 = "VARCHAR(1000)";
-
+ String CODE_10000 = "VARCHAR(10000)";
// Descriptions
String DESCRIPTION_LONG = "VARCHAR(40)";
String DESCRIPTION_SHORT = "VARCHAR(20)";
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/FilterPriority.java b/common/src/main/java/com/mfsys/constant/FilterPriority.java
similarity index 71%
rename from common/src/main/java/com/mfsys/common/configuration/constant/FilterPriority.java
rename to common/src/main/java/com/mfsys/constant/FilterPriority.java
index 3901c55..380cffb 100644
--- a/common/src/main/java/com/mfsys/common/configuration/constant/FilterPriority.java
+++ b/common/src/main/java/com/mfsys/constant/FilterPriority.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.constant;
+package com.mfsys.constant;
public interface FilterPriority {
diff --git a/common/src/main/java/com/mfsys/constant/FormPropertyConst.java b/common/src/main/java/com/mfsys/constant/FormPropertyConst.java
new file mode 100644
index 0000000..2866c99
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/FormPropertyConst.java
@@ -0,0 +1,17 @@
+package com.mfsys.constant;
+
+public interface FormPropertyConst {
+
+ String POR_ORGACODE = "POR_ORGACODE";
+ String USERID = "cmpUserId";
+ String REQUEST_URI = "REQUEST_URI";
+ String CLIENT_IP = "CLIENT_IP";
+ String THIRD_PARTY = "THIRDPARTY";
+ String TEMPLATE_TYPE_NOTIFICATION = "T";
+ String PIN_LOCALE_ARABIC = "ar";
+ String PIN_LOCALE_FRENCH = "fr";
+
+
+
+}
+
diff --git a/common/src/main/java/com/mfsys/constant/IDType.java b/common/src/main/java/com/mfsys/constant/IDType.java
new file mode 100644
index 0000000..320dff7
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/IDType.java
@@ -0,0 +1,19 @@
+package com.mfsys.constant;
+
+public enum IDType {
+
+ cnic("CNIC"),
+ poc("POC"),
+ nicop("NICOP"),
+ passport("PASSPORT");
+
+ private final String value;
+
+ IDType(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/LoggerURI.java b/common/src/main/java/com/mfsys/constant/LoggerURI.java
similarity index 62%
rename from common/src/main/java/com/mfsys/common/configuration/constant/LoggerURI.java
rename to common/src/main/java/com/mfsys/constant/LoggerURI.java
index f586160..9ae8f39 100644
--- a/common/src/main/java/com/mfsys/common/configuration/constant/LoggerURI.java
+++ b/common/src/main/java/com/mfsys/constant/LoggerURI.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.constant;
+package com.mfsys.constant;
public interface LoggerURI {
String GET_LOGS_BY_DATES = "/logs/getByDate";
diff --git a/common/src/main/java/com/mfsys/constant/MicroserviceBaseURI.java b/common/src/main/java/com/mfsys/constant/MicroserviceBaseURI.java
new file mode 100644
index 0000000..cb6caca
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/MicroserviceBaseURI.java
@@ -0,0 +1,5 @@
+package com.mfsys.constant;
+
+public class MicroserviceBaseURI {
+ public static final String MConnect = "/MCONNECT";
+}
diff --git a/common/src/main/java/com/mfsys/constant/MiddlewareERRCode.java b/common/src/main/java/com/mfsys/constant/MiddlewareERRCode.java
new file mode 100644
index 0000000..0164982
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/MiddlewareERRCode.java
@@ -0,0 +1,28 @@
+package com.mfsys.constant;
+
+public enum MiddlewareERRCode implements ErrorMessage {
+
+ IB_PURPOSE_ALREADY_EXISTS("ERR_MDL_B_0001", "Purpose {1} has already exist"),
+
+ ;
+
+ private MiddlewareERRCode(String code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ private String code;
+ private String description;
+
+ @Override
+ public String getCode() {
+ return this.code;
+ }
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+
+}
diff --git a/common/src/main/java/com/mfsys/constant/NotificationMessage.java b/common/src/main/java/com/mfsys/constant/NotificationMessage.java
new file mode 100644
index 0000000..8941cea
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/NotificationMessage.java
@@ -0,0 +1,6 @@
+package com.mfsys.constant;
+
+public interface NotificationMessage {
+ public String getCode();
+ public String getDescription();
+}
diff --git a/common/src/main/java/com/mfsys/constant/OnlineBankingERRCode.java b/common/src/main/java/com/mfsys/constant/OnlineBankingERRCode.java
new file mode 100644
index 0000000..80502e6
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/OnlineBankingERRCode.java
@@ -0,0 +1,76 @@
+package com.mfsys.constant;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public enum OnlineBankingERRCode implements ErrorMessage {
+ ONLINE_BANKING_CUSTOMER_NOT_EXIST("ERR_OBN_0001", "Customer {0} not registered for online banking"),
+ BENEFICIARY_DOES_NOT_EXIST("ERR_OBN_0002", "Beneficiary with Account Number {0} does not exist"),
+ TRANSACTION_DOES_NOT_EXIST("ERR_OBN_0003", "Transaction with Pin Request ID {0} does not exist"),
+ INVALID_CREDENTIALS("ERR_OBN_0004", "Provided credentials are invalid"),
+ CUTOMERID_ALREADY_EXIST("ERR_OBN_0005", "You Can not take this User Name"),
+ BENEFICIARY_ALREADY_EXIST("ERR_OBN_0006", "Beneficiary Already Exist"),
+ ACCOUNT_ALREADY_EXIST("ERR_OBN_0007", "Account Already Exist"),
+ CUTOMERID_NOT_EXIST("ERR_OBN_0008", "User ID Not Exist"),
+ LOCK_USER("ERR_OBN_0009", "Your Account is Lock Due to Five Failed Attemps"),
+ LOCK_USER_ATTEMPS("ERR_OBN_0010", "Your have {1} Attemps left"),
+ PASSWORD_NOT_SAME("ERR_OBN_0011", "New password should not be same as old password"),
+ SERVER_DOWN("ERR_OBN_0012", "Server is down"),
+ CUSTOMER_IDEN_NOT_EXSIT("ERR_OBN_0013", "Customer Iden Number Not Found"),
+ USER_NOT_ACTIVE("ERR_OBN_0014", "User Status Not Active"),
+ OLD_PASSWORD_NOT_MATCHED("ERR_OBN_0015", "password Does Not Match Old Password"),
+ //InterserviceErrorCodes
+ ACCOUNT_DOES_NOT_EXIST("ERR_ACC_B_0001", "Customer account {0} does not exist."),
+ THIRDPARTY_ACCOUNT_DOES_NOT_EXIST("ERR_ACC_B_0006", "Customer account {0} does not exist."),
+ CUSTOMER_DOES_NOT_EXIST("ERR_CRM_0001", "Customer with ID {0} does not exist"),
+ INVALID_OTP("ERR_OTP_B_0001","Invalid OTP"),
+ ACCOUNT_CLOSE("ERR_ACC_B_0004", "Account {1} is closed"),
+ INSUFFICIENT_BAL("ERR_DEP_B_0001", "Account has insufficient balance"),
+ BLACKLIST_CUSTOMER("ERR_ACC_B_0015", "Customer {0} is blacklisted."),
+ TDR_ACCOUNT_NOT_ALLOWED("ERR_ACC_B_0027", "Term Deposit Account is Not Allowed."),
+
+ SMS_GATEWAY_SERVICE_DOWN("ERR_ACC_B_0028","SMS Gateway Service is Down"),
+ ACCOUNT_RESTRICTION_EXISTS("ERR_ACC_B_0029","Account restriction exists"),
+
+
+ ;
+
+ private String code;
+ private String description;
+
+ private OnlineBankingERRCode(String code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ @Override
+ public String getCode() {
+ return this.code;
+ }
+
+ @Override
+ public String getDescription() {
+ return this.description;
+ }
+
+ public static class Mapper {
+ private static final Map mapper = new HashMap();
+
+ public static OnlineBankingERRCode getErrorCode(String code) {
+ return mapper.get(code);
+ }
+
+ public static Set getErrorCodes() {
+ return Collections.unmodifiableSet(mapper.keySet());
+ }
+
+ static {
+ for (OnlineBankingERRCode error : EnumSet.allOf(OnlineBankingERRCode.class)) {
+ mapper.put(error.getCode(), error);
+ }
+ }
+ }
+}
diff --git a/common/src/main/java/com/mfsys/constant/OnlineBankingNotifCode.java b/common/src/main/java/com/mfsys/constant/OnlineBankingNotifCode.java
new file mode 100644
index 0000000..8a9937b
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/OnlineBankingNotifCode.java
@@ -0,0 +1,29 @@
+package com.mfsys.constant;
+
+public enum OnlineBankingNotifCode implements NotificationMessage {
+
+ CUSTOMER_REGISTRATION_PIN("NTF_OBN_B_0001", "New Online Banking Customer Registration Verification Pin"),
+ CUSTOMER_ONE_TIME_PIN("NTF_OBN_B_0002", "Customer One Time Pin for First Login Verification"),
+ CUSTOMER_BENEFICIARY_VERIFY_PIN("NTF_OBN_B_0003", "Customer Beneficiary Verify Pin"),
+ FINANCIAL_TRANSACTION_VERIFY_PIN("NTF_OBN_B_0004", "Financial Transaction Verification Pin"),
+ LOAN_FINANCIAL_TRANSACTION_VERIFY_PIN("NTF_OBN_B_0005", "Loan Financial Transaction Verification Pin");
+
+ private String code;
+ private String description;
+
+ private OnlineBankingNotifCode(String code, String description) {
+ this.code = code;
+ this.description = description;
+ }
+
+ @Override
+ public String getCode() {
+ return code;
+ }
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+}
diff --git a/common/src/main/java/com/mfsys/constant/OnlineBankingURI.java b/common/src/main/java/com/mfsys/constant/OnlineBankingURI.java
new file mode 100644
index 0000000..57b71f7
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/OnlineBankingURI.java
@@ -0,0 +1,100 @@
+package com.mfsys.constant;
+
+
+public interface OnlineBankingURI {
+
+ String REFRESH_TOKEN = "/refreshtoken";
+
+ String CUSTOMER_REGISTER = "/customer/register";
+ String CUSTOMER_REGISTER_PIN_VERIFY = "/customer/register/pin-verify";
+ String CUSTOMER_REGISTER_PIN_RESEND = "/customer/register/pin-resend";
+ String CUSTOMER_SET_PASSWORD = "/customer/set-password";
+ String CUSTOMER_OTP_RESEND = "/customer/register/otp-resend";
+ String CUSTOMER_CHANGE_PASSWORD = "/customer/change-password";
+ String CUSTOMER_LOGIN = "/customer/login";
+
+ String ACCOUNTS_DETAILS = "/accounts/details";
+
+ String BENEFICIARY = "/beneficiary/organization/{porOrgacode}/customer/{cmpCustcode}/customertype/{pctCstycode}/account/{mbmBkmsnumberRef}";
+ String BENEFICIARY_LIST = "/beneficiary/organization/{porOrgacode}/customer/{cmpCustcode}/customertype/{pctCstycode}";
+ String BENEFICIARY_VERIFICATION = "/beneficiary/verify";
+ String BENEFICIARY_VERIFICATION_PIN_RESEND = "/beneficiary/pin/resend";
+
+ String ACCOUNT_TO_ACCOUNT_TRANSACTION_REQUEST = "/transaction/request/account-account";
+ String ACCOUNT_TO_ACCOUNT_TRANSACTION_POST = "/transaction/post/account-account";
+ String TRANSACTION_PIN_RESEND = "/transaction/pin-resend";
+
+ String CUSTOMER_REGISTER_IDNUMBER = "/customer/register/checkid";
+
+ String CUSTOMER_REGISTER_ACCOUNT_NO = "/customer/register/checkaccountno";
+ String FETCH_ACCOUNT_TITLE = "/thirdparty/user/register/checkaccountno";
+
+ String CUSTOMER_REGISTER_USERID = "/customer/register/userid";
+
+ String CUSTOMER_FORGETPASS_USERID = "/customer/forgetPassword/userid";
+
+ String ADD_BENEFICIARY = "/beneficiary/channel/{channelCode}";
+
+ String ADD_BENEFICIARY_URL = "/beneficiary";
+
+ String ACCOUNTS_HISTORY = "/accounts/history";
+
+ String LOAN_ACCOUNT_INDV_DETAILS_URI = "/account/indvdetails";
+
+ String LOAN_ACCOUNT_REQUEST_PAY="/transactions/channel/{channelCode}/customer/{cmpCustcode}/customertype/{pctCstycode}/pay/{obpPincode}";
+ String LOAN_INDIVIDUAL_REPAYMENT_TRANSACTION_URI = "/transactions/pay";
+
+ String CUSTOMER_OTP_SEND = "/customer/login/otp-send";
+
+ String LOAN_ACCOUNT_TRAN_HISTORY = "/account/loan/history";
+
+ String CUSTOMER_FORGETPASS = "/customer/forgetpassword";
+
+ String CUSTOMER_UPDATEPASSWORD = "/customer/updatepassword";
+
+ String ACCOUNT_ACTIVITY = "/account/activity/organization/{porOrgacode}/customer/{cmpCustcode}/customertype/{pctCstycode}/fromdate/{fdate}/todate/{tdate}";
+ String POST_ACCOUNT_ACTIVITY = "/account/activity/organization/{porOrgacode}/customer/{cmpCustcode}/customertype/{pctCstycode}";
+
+ String ZAKAT_HISTORY = "/account/zakat/details";
+
+ String TEST_PIN = "/account/pin";
+
+ String LOAN_TRANSACTION_PIN_RESEND = "/loan/transaction/pin-resend/channel/{channelCode}";
+
+ String LOAN_TRANSACTION_PIN_SEND = "/loan/transaction/pin-send/channel/{channelCode}";
+
+ String CUSTOMER_ACCOUNT_DETAILS = "/customer/account/details";
+
+ String UPDATE_CUSTOMER_DETAILS = "/customer/update";
+
+ String report = "/customer/account/report";
+
+ String Bankingreport = "/generate/report";
+ String CUSTOMER_REGISTRATION_CHECKID = "/thirdparty/user/register/checkid";
+ String CHECK_CUSTOMER_ACCOUNT_NO = "/thirdparty/user/register/checkaccountno";
+ String THIRD_PARTY_CUSTOMER_REGISTER = "/thirdparty/user/register";
+ String THIRDPARTY_CUSTOMER_REGISTER_PIN_RESEND = "/thirdparty/user/register/pin-resend";
+ String THIRDPARTY_CUSTOMER_SET_PASSWORD = "/thirdparty/user/set-password";
+ String THIRDPARTY_CUSTOMER_REGISTER_PIN_VERIFY = "/thirdparty/user/register/pin-verify";
+ String CHANNEL_REGISTRATION = "/thirdparty/channel/register";
+ String THIRDPARTY_USER_AUTHENTICATION = "/thirdparty/user/auth";
+ String THIRDPARTY_ACCOUNT_DETAILS = "/thirdparty/deposit/account/details";
+ String THIRDPARTY_CUSTOMER_UPDATEPASSWORD = "/thirdparty/user/update-password";
+ String THIRDPARTY_DEPOSIT_ACCOUNT_BALANCE_INQUIRY = "/thirdparty/deposit/account/balance-inquiry";
+ String THIRDPARTY_ACCOUNT_TO_ACCOUNT_TRANSACTION_REQUEST = "/thirdparty/deposit/transaction/acc-acc";
+ String THIRDPARTY_ACCOUNT_TO_ACCOUNT_TRANSACTION_POST = "/thirdparty/deposit/transaction/post/acc-acc";
+ String THIRDPARTY_MINI_ACCOUNT_STATEMENT = "/thirdparty/deposit/account/mini-statement";
+ String THIRDPARTY_ACCOUNT_TO_SAMA_WALLET_TRANSACTION = "/thirdparty/deposit/transaction/acc-wallet";
+ String THIRDPARTY_ACCOUNT_TO_GL_TRANSACTION = "/thirdparty/deposit/transaction/acc-gl";
+ String ACCOUNT_TO_GL_TRANSACTION_REQUEST = "/transaction/request/account-gl";
+ String FETCH_CHANNEL_LIST = "/thirdparty/channel/register";
+ String THIRDPARTY_PHONENUMBER = "/thirdparty/deposit/transaction/phoneNumber";
+ String FETCH_IDENTIFIERS = "/include/fetch/identifiers";
+ String THIRDPARTY_SAMA_WALLET_TO_ACCOUNT_TRANSACTION = "/thirdparty/deposit/transaction/wallet-acc";
+ String THIRDPARTY_SAMA_WALLET_TO_ACCOUNT = "/transaction/request/gl-account";
+ String THIRDPARTY_FORGET_PASSWORD_GENERATE_OTP = "/thirdparty/user/forget-password/generate-otp";
+ String THIRDPARTY_FORGET_PASSWORD_SET_PASSWORD= "/thirdparty/user/forget-password/set-password";
+ String THIRDPARTY_FORGET_PASSWORD_PIN_VERIFY = "/thirdparty/user/forget-password/pin-verify";
+ // String FETCH_CHANNEL_LIST = "/thirdparty/channel/register";
+
+}
diff --git a/common/src/main/java/com/mfsys/constant/PROFILES.java b/common/src/main/java/com/mfsys/constant/PROFILES.java
new file mode 100644
index 0000000..26f3819
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/PROFILES.java
@@ -0,0 +1,12 @@
+package com.mfsys.constant;
+
+public class PROFILES {
+
+ public static final String AWS = "aws";
+ public static final String NOT_AWS = "!" + AWS;
+ public static final String DEV = "dev";
+ public static final String NOT_TEST = "!test";
+ public static final String RELEASE = "release";
+
+
+}
diff --git a/common/src/main/java/com/mfsys/constant/PinConstants.java b/common/src/main/java/com/mfsys/constant/PinConstants.java
new file mode 100644
index 0000000..dc78955
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/PinConstants.java
@@ -0,0 +1,8 @@
+package com.mfsys.constant;
+
+public interface PinConstants {
+
+ int PIN_LENGTH = 4;
+ int PIN_UPPER_BOUND_4 = 10000;
+ String PIN_PADDING_CONSTANT_4 = "%04d";
+}
diff --git a/common/src/main/java/com/mfsys/constant/PinStatus.java b/common/src/main/java/com/mfsys/constant/PinStatus.java
new file mode 100644
index 0000000..7c64bcb
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/PinStatus.java
@@ -0,0 +1,8 @@
+package com.mfsys.constant;
+
+public interface PinStatus {
+
+ String PIN_UNVERIFIED = "Unverified";
+ String PIN_VERIFIED = "Verified";
+ String PIN_EXPIRED = "Expired";
+}
diff --git a/common/src/main/java/com/mfsys/constant/PinType.java b/common/src/main/java/com/mfsys/constant/PinType.java
new file mode 100644
index 0000000..4740e60
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/PinType.java
@@ -0,0 +1,48 @@
+package com.mfsys.constant;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public enum PinType {
+
+ ONE_TIME_PIN("OTP"),
+ REGISTRATION_VERIFY_PIN("REG"),
+ BENEFICIARY_VERIFY_PIN("BEN"),
+
+ FINANCIAL_TRANSACTION_PIN("FTP"),
+ LOAN_FINANCIAL_TRANSACTION_PIN("LTP"),
+ DEPOSIT_TRANSACTION_PIN("DTP"),
+ ;
+
+ private String code;
+
+ private PinType(String code) {
+ this.code = code;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public static class Mapper {
+ private static final Map mapper = new HashMap();
+
+ public static PinType getPinType(String code) {
+ return mapper.get(code);
+ }
+
+ public static Set getPinTypes() {
+ return Collections.unmodifiableSet(mapper.keySet());
+ }
+
+ static {
+ for (PinType pin : EnumSet.allOf(PinType.class)) {
+ mapper.put(pin.getCode(), pin);
+ }
+ }
+
+ }
+}
diff --git a/common/src/main/java/com/mfsys/constant/PropertyConstant.java b/common/src/main/java/com/mfsys/constant/PropertyConstant.java
new file mode 100644
index 0000000..9117489
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/PropertyConstant.java
@@ -0,0 +1,5 @@
+package com.mfsys.constant;
+
+public interface PropertyConstant {
+
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java b/common/src/main/java/com/mfsys/constant/TokenBypassURI.java
similarity index 84%
rename from common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java
rename to common/src/main/java/com/mfsys/constant/TokenBypassURI.java
index f1a61e1..e28d890 100644
--- a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java
+++ b/common/src/main/java/com/mfsys/constant/TokenBypassURI.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.constant;
+package com.mfsys.constant;
import java.util.ArrayList;
import java.util.Arrays;
@@ -7,6 +7,7 @@ import java.util.List;
public interface TokenBypassURI {
List URIs = new ArrayList(Arrays.asList(
"/aconnect/signin",
+ "/aconnect/loginUser",
"/aconnect/transactions/accounttogl",
"/aconnect/account/miscDetails",
"/deposit/account/miscDetails",
@@ -23,7 +24,8 @@ public interface TokenBypassURI {
"/aconnect/generalledger/transactions/reversal",
"/aconnect/deposit/transactions/rejection",
- "/aconnect/generalledger/transactions/rejection"
+ "/aconnect/generalledger/transactions/rejection",
+ "/aconnect/generate"
));
}
diff --git a/common/src/main/java/com/mfsys/constant/TransactionType.java b/common/src/main/java/com/mfsys/constant/TransactionType.java
new file mode 100644
index 0000000..9387eb6
--- /dev/null
+++ b/common/src/main/java/com/mfsys/constant/TransactionType.java
@@ -0,0 +1,9 @@
+package com.mfsys.constant;
+
+public interface TransactionType {
+
+ // TODO: Must be stored in DB
+ String ACCOUNT_TO_ACCOUNT_FUNDS_TRANSFER = "ATAFT";
+ String LOAN_ACCOUNT_FUNDS_TRANSFER = "LAFT";
+ String ACCOUNT_TO_WALLET_FUNDS_TRANSFER = "ATWFT";
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/mfsys/common/configuration/controller/LoggerController.java b/common/src/main/java/com/mfsys/controller/LoggerController.java
similarity index 76%
rename from common/src/main/java/com/mfsys/common/configuration/controller/LoggerController.java
rename to common/src/main/java/com/mfsys/controller/LoggerController.java
index 89bec93..ff46db8 100644
--- a/common/src/main/java/com/mfsys/common/configuration/controller/LoggerController.java
+++ b/common/src/main/java/com/mfsys/controller/LoggerController.java
@@ -1,8 +1,8 @@
-package com.mfsys.common.configuration.controller;
+package com.mfsys.controller;
-import com.mfsys.common.configuration.constant.LoggerURI;
-import com.mfsys.common.configuration.model.Logger;
-import com.mfsys.common.configuration.service.LoggerService;
+import com.mfsys.constant.LoggerURI;
+import com.mfsys.model.Logger;
+import com.mfsys.service.LoggerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/ApplicationException.java b/common/src/main/java/com/mfsys/exception/ApplicationException.java
similarity index 96%
rename from common/src/main/java/com/mfsys/common/configuration/exception/ApplicationException.java
rename to common/src/main/java/com/mfsys/exception/ApplicationException.java
index 298dfaf..4ef47db 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/ApplicationException.java
+++ b/common/src/main/java/com/mfsys/exception/ApplicationException.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
import java.text.MessageFormat;
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/ApplicationExceptionMapper.java b/common/src/main/java/com/mfsys/exception/ApplicationExceptionMapper.java
similarity index 99%
rename from common/src/main/java/com/mfsys/common/configuration/exception/ApplicationExceptionMapper.java
rename to common/src/main/java/com/mfsys/exception/ApplicationExceptionMapper.java
index 0370565..485365b 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/ApplicationExceptionMapper.java
+++ b/common/src/main/java/com/mfsys/exception/ApplicationExceptionMapper.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/common/src/main/java/com/mfsys/exception/DecryptionException.java b/common/src/main/java/com/mfsys/exception/DecryptionException.java
new file mode 100644
index 0000000..5365eea
--- /dev/null
+++ b/common/src/main/java/com/mfsys/exception/DecryptionException.java
@@ -0,0 +1,11 @@
+package com.mfsys.exception;
+
+public class DecryptionException extends Exception{
+ public DecryptionException(String message) {
+ super(message);
+ }
+
+ public DecryptionException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/DuplicateException.java b/common/src/main/java/com/mfsys/exception/DuplicateException.java
similarity index 76%
rename from common/src/main/java/com/mfsys/common/configuration/exception/DuplicateException.java
rename to common/src/main/java/com/mfsys/exception/DuplicateException.java
index a92fb23..c4f1fd9 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/DuplicateException.java
+++ b/common/src/main/java/com/mfsys/exception/DuplicateException.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
public class DuplicateException extends ApplicationException {
public DuplicateException(ErrorMessage errCode){
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/ErrorMessage.java b/common/src/main/java/com/mfsys/exception/ErrorMessage.java
similarity index 66%
rename from common/src/main/java/com/mfsys/common/configuration/exception/ErrorMessage.java
rename to common/src/main/java/com/mfsys/exception/ErrorMessage.java
index 0c082a8..2a2c1f1 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/ErrorMessage.java
+++ b/common/src/main/java/com/mfsys/exception/ErrorMessage.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
public interface ErrorMessage {
public String getCode();
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/ExceptionDAO.java b/common/src/main/java/com/mfsys/exception/ExceptionDAO.java
similarity index 89%
rename from common/src/main/java/com/mfsys/common/configuration/exception/ExceptionDAO.java
rename to common/src/main/java/com/mfsys/exception/ExceptionDAO.java
index d86e81a..3c86741 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/ExceptionDAO.java
+++ b/common/src/main/java/com/mfsys/exception/ExceptionDAO.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
public class ExceptionDAO {
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/ExceptionUtil.java b/common/src/main/java/com/mfsys/exception/ExceptionUtil.java
similarity index 89%
rename from common/src/main/java/com/mfsys/common/configuration/exception/ExceptionUtil.java
rename to common/src/main/java/com/mfsys/exception/ExceptionUtil.java
index 53aaa99..17230f6 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/ExceptionUtil.java
+++ b/common/src/main/java/com/mfsys/exception/ExceptionUtil.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
import org.slf4j.MDC;
diff --git a/common/src/main/java/com/mfsys/common/configuration/exception/ResourceNotFoundException.java b/common/src/main/java/com/mfsys/exception/ResourceNotFoundException.java
similarity index 78%
rename from common/src/main/java/com/mfsys/common/configuration/exception/ResourceNotFoundException.java
rename to common/src/main/java/com/mfsys/exception/ResourceNotFoundException.java
index 9f495fe..7a74605 100644
--- a/common/src/main/java/com/mfsys/common/configuration/exception/ResourceNotFoundException.java
+++ b/common/src/main/java/com/mfsys/exception/ResourceNotFoundException.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.exception;
+package com.mfsys.exception;
public class ResourceNotFoundException extends ApplicationException {
public ResourceNotFoundException(String porOrgacode, ErrorMessage errCode){
diff --git a/common/src/main/java/com/mfsys/common/configuration/filter/CORSResponseFilter.java b/common/src/main/java/com/mfsys/filter/CORSResponseFilter.java
similarity index 98%
rename from common/src/main/java/com/mfsys/common/configuration/filter/CORSResponseFilter.java
rename to common/src/main/java/com/mfsys/filter/CORSResponseFilter.java
index eaca561..358b3b3 100644
--- a/common/src/main/java/com/mfsys/common/configuration/filter/CORSResponseFilter.java
+++ b/common/src/main/java/com/mfsys/filter/CORSResponseFilter.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.filter;
+package com.mfsys.filter;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -12,7 +12,7 @@ import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
-import com.mfsys.common.configuration.constant.FilterPriority;
+import com.mfsys.constant.FilterPriority;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletException;
diff --git a/common/src/main/java/com/mfsys/common/configuration/filter/LoggingFilter.java b/common/src/main/java/com/mfsys/filter/LoggingFilter.java
similarity index 93%
rename from common/src/main/java/com/mfsys/common/configuration/filter/LoggingFilter.java
rename to common/src/main/java/com/mfsys/filter/LoggingFilter.java
index fd2e2f8..1c3ad88 100644
--- a/common/src/main/java/com/mfsys/common/configuration/filter/LoggingFilter.java
+++ b/common/src/main/java/com/mfsys/filter/LoggingFilter.java
@@ -1,9 +1,9 @@
-package com.mfsys.common.configuration.filter;
+package com.mfsys.filter;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.mfsys.common.configuration.constant.FilterPriority;
-import com.mfsys.common.configuration.model.Logger;
-import com.mfsys.common.configuration.repository.LoggerRepository;
+import com.mfsys.constant.FilterPriority;
+import com.mfsys.model.Logger;
+import com.mfsys.repository.LoggerRepository;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
diff --git a/common/src/main/java/com/mfsys/filter/RefreshToken.java b/common/src/main/java/com/mfsys/filter/RefreshToken.java
new file mode 100644
index 0000000..304d460
--- /dev/null
+++ b/common/src/main/java/com/mfsys/filter/RefreshToken.java
@@ -0,0 +1,20 @@
+package com.mfsys.filter;
+
+public class RefreshToken {
+
+ private String token;
+
+ public RefreshToken(String token) {
+ super();
+ this.token = token;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/filter/TokenAuthenticationFilter.java b/common/src/main/java/com/mfsys/filter/TokenAuthenticationFilter.java
similarity index 88%
rename from common/src/main/java/com/mfsys/common/configuration/filter/TokenAuthenticationFilter.java
rename to common/src/main/java/com/mfsys/filter/TokenAuthenticationFilter.java
index 5a2a2ef..d828aae 100644
--- a/common/src/main/java/com/mfsys/common/configuration/filter/TokenAuthenticationFilter.java
+++ b/common/src/main/java/com/mfsys/filter/TokenAuthenticationFilter.java
@@ -1,11 +1,10 @@
-package com.mfsys.common.configuration.filter;
+package com.mfsys.filter;
import java.io.IOException;
import java.util.Objects;
-import com.mfsys.common.configuration.constant.PropertyConstant;
-import com.mfsys.common.configuration.constant.TokenBypassURI;
-import com.mfsys.common.configuration.service.JwtService;
+import com.mfsys.constant.TokenBypassURI;
+import com.mfsys.service.JwtService;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
@@ -17,7 +16,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
-import com.mfsys.common.configuration.constant.FilterPriority;
+import com.mfsys.constant.FilterPriority;
@Component
@Order(FilterPriority.AUTHENTICATION)
diff --git a/common/src/main/java/com/mfsys/common/configuration/model/Logger.java b/common/src/main/java/com/mfsys/model/Logger.java
similarity index 95%
rename from common/src/main/java/com/mfsys/common/configuration/model/Logger.java
rename to common/src/main/java/com/mfsys/model/Logger.java
index 16b6c6c..a421edf 100644
--- a/common/src/main/java/com/mfsys/common/configuration/model/Logger.java
+++ b/common/src/main/java/com/mfsys/model/Logger.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.model;
+package com.mfsys.model;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
diff --git a/common/src/main/java/com/mfsys/common/configuration/repository/LoggerRepository.java b/common/src/main/java/com/mfsys/repository/LoggerRepository.java
similarity index 77%
rename from common/src/main/java/com/mfsys/common/configuration/repository/LoggerRepository.java
rename to common/src/main/java/com/mfsys/repository/LoggerRepository.java
index 507a207..1a29112 100644
--- a/common/src/main/java/com/mfsys/common/configuration/repository/LoggerRepository.java
+++ b/common/src/main/java/com/mfsys/repository/LoggerRepository.java
@@ -1,6 +1,6 @@
-package com.mfsys.common.configuration.repository;
+package com.mfsys.repository;
-import com.mfsys.common.configuration.model.Logger;
+import com.mfsys.model.Logger;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
diff --git a/common/src/main/java/com/mfsys/service/JwtService.java b/common/src/main/java/com/mfsys/service/JwtService.java
new file mode 100644
index 0000000..fa2fb77
--- /dev/null
+++ b/common/src/main/java/com/mfsys/service/JwtService.java
@@ -0,0 +1,98 @@
+package com.mfsys.service;
+
+import io.jsonwebtoken.Claims;
+import io.jsonwebtoken.JwtException;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.security.Keys;
+import jakarta.xml.bind.DatatypeConverter;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.crypto.SecretKey;
+import java.security.Key;
+import java.time.Instant;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Function;
+
+@Service
+public class JwtService {
+
+ @Value("${app.jwtSecretKey}")
+ private String secret;
+
+ @Value("${app.jwtExpirationMs}")
+ private Long expiration;
+
+ @Value("${app.jwtMaxIdleMs}")
+ private Long refreshExpiration;
+
+ public String extractUsername(String token) {
+ return extractClaim(token, Claims::getSubject);
+ }
+
+ public Date extractExpiration(String token) {
+ return extractClaim(token, Claims::getExpiration);
+ }
+
+ public T extractClaim(String token, Function claimsResolver) {
+ final Claims claims = extractAllClaims(token);
+ return claimsResolver.apply(claims);
+ }
+
+ private Claims extractAllClaims(String token) {
+ try {
+ return Jwts.parser()
+ .verifyWith((SecretKey) getSigningKey())
+ .build()
+ .parseSignedClaims(token)
+ .getPayload();
+ } catch (JwtException e) {
+ throw new RuntimeException("Invalid JWT token", e);
+ }
+ }
+
+ private Boolean isTokenExpired(String token) {
+ return extractExpiration(token).before(new Date());
+ }
+
+ public String generateToken(String subject) {
+ Map claims = new HashMap<>();
+ return createToken(claims, subject, expiration);
+ }
+
+ public String generateRefreshToken(String subject) {
+ Map claims = new HashMap<>();
+ return createToken(claims, subject, refreshExpiration);
+ }
+
+ private String createToken(Map claims, String subject, Long expiration) {
+ Instant now = Instant.now();
+ return Jwts.builder()
+ .claims(claims)
+ .subject(subject)
+ .issuedAt(Date.from(now))
+ .expiration(Date.from(now.plusMillis(expiration)))
+ .signWith(getSigningKey())
+ .compact();
+ }
+
+ public Boolean validateToken(String token, String subject) {
+ final String username = extractUsername(token);
+ return (username.equals(subject) && !isTokenExpired(token));
+ }
+
+ public Boolean isTokenValid(String token) {
+ try {
+ return !isTokenExpired(token);
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
+ private Key getSigningKey() {
+ byte[] keyBytes = DatatypeConverter.parseBase64Binary(secret);
+ return Keys.hmacShaKeyFor(keyBytes);
+ }
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/service/LoggerService.java b/common/src/main/java/com/mfsys/service/LoggerService.java
similarity index 82%
rename from common/src/main/java/com/mfsys/common/configuration/service/LoggerService.java
rename to common/src/main/java/com/mfsys/service/LoggerService.java
index 2a44027..f64f800 100644
--- a/common/src/main/java/com/mfsys/common/configuration/service/LoggerService.java
+++ b/common/src/main/java/com/mfsys/service/LoggerService.java
@@ -1,7 +1,7 @@
-package com.mfsys.common.configuration.service;
+package com.mfsys.service;
-import com.mfsys.common.configuration.model.Logger;
-import com.mfsys.common.configuration.repository.LoggerRepository;
+import com.mfsys.model.Logger;
+import com.mfsys.repository.LoggerRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
diff --git a/common/src/main/java/com/mfsys/common/configuration/service/PasswordEncryptionService.java b/common/src/main/java/com/mfsys/service/PasswordEncryptionService.java
similarity index 89%
rename from common/src/main/java/com/mfsys/common/configuration/service/PasswordEncryptionService.java
rename to common/src/main/java/com/mfsys/service/PasswordEncryptionService.java
index 46962bc..47c5a1c 100644
--- a/common/src/main/java/com/mfsys/common/configuration/service/PasswordEncryptionService.java
+++ b/common/src/main/java/com/mfsys/service/PasswordEncryptionService.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.service;
+package com.mfsys.service;
import org.mindrot.jbcrypt.BCrypt;
import org.springframework.stereotype.Service;
diff --git a/common/src/main/java/com/mfsys/trust/CustomClaimsProperty.java b/common/src/main/java/com/mfsys/trust/CustomClaimsProperty.java
new file mode 100644
index 0000000..96d0ca5
--- /dev/null
+++ b/common/src/main/java/com/mfsys/trust/CustomClaimsProperty.java
@@ -0,0 +1,17 @@
+package com.mfsys.trust;
+
+public enum CustomClaimsProperty {
+
+ LAST_ACTIVE_TIME("lastActiveTime"), URLS("urls");
+
+ CustomClaimsProperty(String code) {
+ this.code = code;
+ }
+
+ public String getCode() {
+ return this.code;
+ }
+
+ private String code;
+
+}
diff --git a/common/src/main/java/com/mfsys/trust/DefaultUrl.java b/common/src/main/java/com/mfsys/trust/DefaultUrl.java
new file mode 100644
index 0000000..2304285
--- /dev/null
+++ b/common/src/main/java/com/mfsys/trust/DefaultUrl.java
@@ -0,0 +1,32 @@
+package com.mfsys.trust;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class DefaultUrl implements Urls {
+
+ protected final List urls;
+ protected final String type;
+
+ public DefaultUrl(@JsonProperty("urls") List urls, @JsonProperty("type") String type) {
+ this.urls = createUrlList(urls);
+ this.type = type;
+ }
+
+ private List createUrlList(List urls) {
+ return Collections.unmodifiableList(urls);
+ }
+
+ @Override
+ public List getUrls() {
+ return urls;
+ }
+
+ @Override
+ public String getType() {
+ return type;
+ }
+
+}
diff --git a/common/src/main/java/com/mfsys/trust/IncludeAllUrl.java b/common/src/main/java/com/mfsys/trust/IncludeAllUrl.java
new file mode 100644
index 0000000..84075f6
--- /dev/null
+++ b/common/src/main/java/com/mfsys/trust/IncludeAllUrl.java
@@ -0,0 +1,11 @@
+package com.mfsys.trust;
+
+import java.util.Arrays;
+
+public final class IncludeAllUrl extends DefaultUrl {
+
+ public IncludeAllUrl() {
+ super(Arrays.asList("*"), UrlType.INCLUDE_ALL.getCode());
+ }
+
+}
diff --git a/common/src/main/java/com/mfsys/trust/JWTToken.java b/common/src/main/java/com/mfsys/trust/JWTToken.java
new file mode 100644
index 0000000..75e7728
--- /dev/null
+++ b/common/src/main/java/com/mfsys/trust/JWTToken.java
@@ -0,0 +1,86 @@
+//package com.mfsys.trust;
+//
+//import java.security.Key;
+//import java.util.Date;
+//
+//import javax.crypto.spec.SecretKeySpec;
+//import jakarta.xml.bind.DatatypeConverter;
+//
+//import io.jsonwebtoken.Claims;
+//import io.jsonwebtoken.ExpiredJwtException;
+//import io.jsonwebtoken.JwtBuilder;
+//import io.jsonwebtoken.Jwts;
+//import io.jsonwebtoken.SignatureAlgorithm;
+//
+//public final class JWTToken {
+//
+// // The JWT signature algorithm we will be using to sign the token
+// // TODO KM Modify it to RSA algo
+// private static SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS512;
+//
+// private JWTToken() {
+// }
+//
+// public static String generateJWT(String id, String subject, String issuer, String secretKey, long expirationMs,
+// String defaultUrl) {
+//
+// // We will sign our JWT with our ApiKey secret
+// byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(secretKey);
+// Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
+//
+// // Let's set the JWT Claims
+// JwtBuilder builder = Jwts.builder().setId(id).setSubject(subject).setIssuer(issuer).setIssuedAt(new Date())
+// .setExpiration(new Date((new Date()).getTime() + expirationMs))
+// .claim(CustomClaimsProperty.LAST_ACTIVE_TIME.getCode(), new Date())
+// .claim(CustomClaimsProperty.URLS.getCode(), defaultUrl).signWith(signatureAlgorithm, signingKey);
+//
+// // Builds the JWT and serializes it to a compact, URL-safe string
+// return builder.compact();
+// }
+//
+// public static String refreshJWT(String jwt, String id, String subject, long maxIdleTime, String issuer,
+// String secretKey, long expirationMs) {
+// try {
+// Claims claims = Jwts.parser()
+// .setSigningKey(DatatypeConverter.parseBase64Binary(secretKey))
+// .build()
+// .parseSignedClaims(jwt)
+// .getPayload();
+//
+// return generateJWT(id, subject, issuer, secretKey, expirationMs,
+// claims.get(CustomClaimsProperty.URLS.getCode(), String.class));
+// } catch (ExpiredJwtException e) {
+// if (new Date().getTime() - e.getClaims().get(CustomClaimsProperty.LAST_ACTIVE_TIME.getCode(), Date.class)
+// .getTime() > maxIdleTime) {
+// throw e;
+// } else {
+// return generateJWT(id, subject, issuer, secretKey, expirationMs,
+// e.getClaims().get(CustomClaimsProperty.URLS.getCode(), String.class));
+// }
+// }
+// }
+//
+// public static Claims parseJWT(String jwt, String secretKey) {
+//
+// // This line will throw an exception if it is not a signed JWS (as expected)
+// return Jwts.parser()
+// .setSigningKey(DatatypeConverter.parseBase64Binary(secretKey))
+// .build()
+// .parseSignedClaims(jwt)
+// .getPayload();
+//
+// }
+//
+// public static String updateLastActiveTime(String jwt, String secretKey) {
+// byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(secretKey);
+// Claims claims = Jwts.parser()
+// .setSigningKey(DatatypeConverter.parseBase64Binary(secretKey))
+// .build()
+// .parseSignedClaims(jwt)
+// .getPayload();
+// claims.put(CustomClaimsProperty.LAST_ACTIVE_TIME.getCode(), new Date());
+// Key signingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());
+// return Jwts.builder().setClaims(claims).signWith(signatureAlgorithm, signingKey).compact();
+// }
+//
+//}
diff --git a/common/src/main/java/com/mfsys/trust/UrlType.java b/common/src/main/java/com/mfsys/trust/UrlType.java
new file mode 100644
index 0000000..9bc1a51
--- /dev/null
+++ b/common/src/main/java/com/mfsys/trust/UrlType.java
@@ -0,0 +1,17 @@
+package com.mfsys.trust;
+
+public enum UrlType {
+
+ INCLUDE("include"), EXCLUDE("exclude"), INCLUDE_ALL("includeAll");
+
+ UrlType(String code) {
+ this.code = code;
+ }
+
+ public String getCode() {
+ return this.code;
+ }
+
+ private String code;
+
+}
diff --git a/common/src/main/java/com/mfsys/trust/Urls.java b/common/src/main/java/com/mfsys/trust/Urls.java
new file mode 100644
index 0000000..076a02c
--- /dev/null
+++ b/common/src/main/java/com/mfsys/trust/Urls.java
@@ -0,0 +1,8 @@
+package com.mfsys.trust;
+
+import java.util.List;
+
+public interface Urls {
+ public List getUrls();
+ public String getType();
+}
diff --git a/common/src/main/java/com/mfsys/common/configuration/util/JSONUtil.java b/common/src/main/java/com/mfsys/util/JSONUtil.java
similarity index 98%
rename from common/src/main/java/com/mfsys/common/configuration/util/JSONUtil.java
rename to common/src/main/java/com/mfsys/util/JSONUtil.java
index 95b1e7e..795b912 100644
--- a/common/src/main/java/com/mfsys/common/configuration/util/JSONUtil.java
+++ b/common/src/main/java/com/mfsys/util/JSONUtil.java
@@ -1,4 +1,4 @@
-package com.mfsys.common.configuration.util;
+package com.mfsys.util;
import java.io.IOException;
import java.io.InputStream;
diff --git a/common/src/main/resources/application.properties b/common/src/main/resources/application.properties
index 8b13789..e69de29 100644
--- a/common/src/main/resources/application.properties
+++ b/common/src/main/resources/application.properties
@@ -1 +0,0 @@
-
diff --git a/econnect/pom.xml b/econnect/pom.xml
index 13b9db9..37987d6 100644
--- a/econnect/pom.xml
+++ b/econnect/pom.xml
@@ -85,23 +85,23 @@
-
- io.jsonwebtoken
- jjwt-api
- 0.12.3
-
-
- io.jsonwebtoken
- jjwt-impl
- 0.12.3
- runtime
-
-
- io.jsonwebtoken
- jjwt-jackson
- 0.12.3
- runtime
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -132,6 +132,7 @@
org.springframework
spring-context
+
diff --git a/econnect/src/main/java/com/mfsys/aconnect/client/controller/LoginController.java b/econnect/src/main/java/com/mfsys/aconnect/client/controller/LoginController.java
index ffbf6c7..27ddab2 100644
--- a/econnect/src/main/java/com/mfsys/aconnect/client/controller/LoginController.java
+++ b/econnect/src/main/java/com/mfsys/aconnect/client/controller/LoginController.java
@@ -2,7 +2,7 @@ package com.mfsys.aconnect.client.controller;
import com.mfsys.aconnect.client.dto.SigninRequest;
import com.mfsys.aconnect.client.service.LoginService;
-import com.mfsys.common.configuration.constant.AconnectURI;
+import com.mfsys.constant.AconnectURI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/econnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java b/econnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java
index 8be0864..4a96b2d 100644
--- a/econnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java
+++ b/econnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java
@@ -2,7 +2,7 @@ package com.mfsys.aconnect.client.controller;
import com.mfsys.aconnect.client.dto.*;
import com.mfsys.aconnect.client.service.TransactionService;
-import com.mfsys.common.configuration.constant.AconnectURI;
+import com.mfsys.constant.AconnectURI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity;
diff --git a/econnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java b/econnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java
index 3a468bb..9dd821d 100644
--- a/econnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java
+++ b/econnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java
@@ -14,7 +14,7 @@ import java.time.LocalDate;
import java.util.Map;
-import static com.mfsys.common.configuration.constant.AconnectURI.DEPOSIT_CIIHIVE_ACCOUNT_MISCELLANEOUS_DETAILS_URI;
+import static com.mfsys.constant.AconnectURI.DEPOSIT_CIIHIVE_ACCOUNT_MISCELLANEOUS_DETAILS_URI;
@Service
diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/controller/JwtTestController.java b/econnect/src/main/java/com/mfsys/aconnect/security/controller/JwtTestController.java
new file mode 100644
index 0000000..e69ced0
--- /dev/null
+++ b/econnect/src/main/java/com/mfsys/aconnect/security/controller/JwtTestController.java
@@ -0,0 +1,30 @@
+package com.mfsys.aconnect.security.controller;
+
+import com.mfsys.service.JwtService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Base64;
+
+@RestController
+public class JwtTestController {
+
+ @Autowired
+ private JwtService jwtService;
+
+ // Example: http://localhost:8080/test/generate?username=testuser
+ // Example: http://localhost:8080/test/generate?username=testuser
+ @GetMapping("/generate")
+ public String generateToken(@RequestParam String username) {
+ return jwtService.generateToken(username);
+ }
+// @PostMapping("/loginUser")
+// public ResponseEntity> userAuthentication(@RequestBody UserManagement userManagement) throws Exception {
+// System.out.println(userManagement.getUserId());
+// byte[] decodedBytes = Base64.getDecoder().decode(userManagement.getUserPassword());
+// String decodedString = new String(decodedBytes);
+//
+// return userManagementService.userAuthentication(userManagement.getUserId(), decodedString,userManagement.getPorOrgacode());
+// }
+}
diff --git a/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java b/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java
index b90ec02..ef9416c 100644
--- a/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java
+++ b/econnect/src/main/java/com/mfsys/aconnect/security/service/AuthenticationService.java
@@ -1,7 +1,7 @@
package com.mfsys.aconnect.security.service;
-import com.mfsys.common.configuration.service.JwtService;
-import com.mfsys.common.configuration.service.PasswordEncryptionService;
+import com.mfsys.service.JwtService;
+import com.mfsys.service.PasswordEncryptionService;
import com.mfsys.aconnect.security.dto.LoginRequest;
import com.mfsys.aconnect.security.dto.LoginResponse;
import com.mfsys.aconnect.usermanagement.model.User;
diff --git a/econnect/src/main/java/com/mfsys/aconnect/usermanagement/filter/SubscriptionFilter.java b/econnect/src/main/java/com/mfsys/aconnect/usermanagement/filter/SubscriptionFilter.java
index 5e29ed9..09bc8a6 100644
--- a/econnect/src/main/java/com/mfsys/aconnect/usermanagement/filter/SubscriptionFilter.java
+++ b/econnect/src/main/java/com/mfsys/aconnect/usermanagement/filter/SubscriptionFilter.java
@@ -1,7 +1,7 @@
package com.mfsys.aconnect.usermanagement.filter;
-import com.mfsys.common.configuration.constant.FilterPriority;
-import com.mfsys.common.configuration.constant.TokenBypassURI;
+import com.mfsys.constant.FilterPriority;
+import com.mfsys.constant.TokenBypassURI;
import com.mfsys.aconnect.configuration.service.RequestRateLimiterService;
import com.mfsys.aconnect.usermanagement.model.Role;
import com.mfsys.aconnect.usermanagement.model.User;
diff --git a/econnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java b/econnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java
index 806d23c..486d553 100644
--- a/econnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java
+++ b/econnect/src/main/java/com/mfsys/aconnect/usermanagement/service/UserService.java
@@ -1,6 +1,6 @@
package com.mfsys.aconnect.usermanagement.service;
-import com.mfsys.common.configuration.service.PasswordEncryptionService;
+import com.mfsys.service.PasswordEncryptionService;
import com.mfsys.aconnect.usermanagement.dto.UserDTOs;
import com.mfsys.aconnect.usermanagement.model.User;
import com.mfsys.aconnect.usermanagement.repository.UserRepository;
diff --git a/econnect/src/main/resources/application-dev.properties b/econnect/src/main/resources/application-dev.properties
index 02b1c3f..97380e7 100644
--- a/econnect/src/main/resources/application-dev.properties
+++ b/econnect/src/main/resources/application-dev.properties
@@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
-jwt.secret = mySecretKey123456789012345678901234567890
+jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000
jwt.refresh-expiration= 604800000
diff --git a/econnect/src/main/resources/application-live.properties b/econnect/src/main/resources/application-live.properties
index 7768e2b..25d47dc 100644
--- a/econnect/src/main/resources/application-live.properties
+++ b/econnect/src/main/resources/application-live.properties
@@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
-jwt.secret = mySecretKey123456789012345678901234567890
+jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000
jwt.refresh-expiration= 604800000
diff --git a/econnect/src/main/resources/application-test.properties b/econnect/src/main/resources/application-test.properties
index 4682fe1..dc9c5fe 100644
--- a/econnect/src/main/resources/application-test.properties
+++ b/econnect/src/main/resources/application-test.properties
@@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
-jwt.secret = mySecretKey123456789012345678901234567890
+jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000
jwt.refresh-expiration= 604800000
diff --git a/econnect/src/main/resources/application-uat.properties b/econnect/src/main/resources/application-uat.properties
index 636d9c7..c92a03e 100644
--- a/econnect/src/main/resources/application-uat.properties
+++ b/econnect/src/main/resources/application-uat.properties
@@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
-jwt.secret = mySecretKey123456789012345678901234567890
+jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000
jwt.refresh-expiration= 604800000
diff --git a/econnect/src/main/resources/application.properties b/econnect/src/main/resources/application.properties
index 9e1e3fc..fbaf9ee 100644
--- a/econnect/src/main/resources/application.properties
+++ b/econnect/src/main/resources/application.properties
@@ -14,8 +14,8 @@ spring.jpa.properties.hibernate.connection.CharSet=utf-8
spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
-
-jwt.secret = mySecretKey123456789012345678901234567890
+#
+jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000
jwt.refresh-expiration= 604800000
@@ -47,18 +47,18 @@ jwt.refresh-expiration= 604800000
#app.organization.uri=0005
-#app.security.uri=http://localhost:9090/security/auth/user
+app.security.uri=http://localhost:9090/security/auth/user
# ${CMB_SQL_DB_USER}
# ${CMB_SQL_DB_USER}
-#app.deposit.uri=http://localhost:9095
-#app.generalledger.uri=http://localhost:9093
-#app.organization.uri=0005
+app.deposit.uri=http://localhost:9095
+app.generalledger.uri=http://localhost:9093
+app.organization.uri=0005
-app.deposit.uri=${CMB_DEPOSIT_SERVER_URL}
-app.generalledger.uri=${CMB_GL_SERVER_URL}
-app.organization.uri=${CMB_ORGA_CODE}
-app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user
+#app.deposit.uri=${CMB_DEPOSIT_SERVER_URL}
+#app.generalledger.uri=${CMB_GL_SERVER_URL}
+#app.organization.uri=${CMB_ORGA_CODE}
+#app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user
# Deposit URLs
@@ -70,3 +70,7 @@ app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user
#app.environment.dev.generalLedgerUri=http://localhost:9093/generalledger
#app.environment.uat.generalLedgerUri=http://uat-gl-server:9093/generalledger
#app.environment.live.generalLedgerUri=https://live-gl-server.com/generalledger
+app.jwtIssuer = MFSys
+app.jwtSecretKey = U6YLGV8ODCBPqpdZK05SKtR0xSXZPg4lrzF7EeIkB71qU1wUWvEEglwYjd0l0Gen4E+gT4MzsbWgqLBNHwwV6A==
+app.jwtExpirationMs = 180000
+app.jwtMaxIdleMs=7200000
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index 6b99e99..4c2abac 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -29,10 +29,12 @@
21
-
+ 1.6.2
+
../common
../econnect
+ ../security
diff --git a/security/.gitignore b/security/.gitignore
new file mode 100644
index 0000000..b83d222
--- /dev/null
+++ b/security/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/security/pom.xml b/security/pom.xml
new file mode 100644
index 0000000..ad9a132
--- /dev/null
+++ b/security/pom.xml
@@ -0,0 +1,46 @@
+
+
+ 4.0.0
+
+ com.mfsys
+ parent
+ 0.0.1
+ ../parent/pom.xml
+
+ security
+
+
+ security
+
+
+
+
+ jakarta.validation
+ jakarta.validation-api
+
+
+ io.swagger
+ swagger-annotations
+ ${swagger-annotations-version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ com.mfsys
+ common
+ ${project.version}
+
+
+
+
\ No newline at end of file
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/Error/ErrorClass.java b/security/src/main/java/com/mfsys/client/africa/middleware/Error/ErrorClass.java
new file mode 100644
index 0000000..eefbad9
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/Error/ErrorClass.java
@@ -0,0 +1,25 @@
+package com.mfsys.client.africa.middleware.Error;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public class ErrorClass {
+
+ @JsonProperty("errorMessage")
+ private String errorMessage;
+
+
+
+ public ErrorClass(String errorMessage) {
+ super();
+ this.errorMessage = errorMessage;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public void setErrorMessage(String errorMessage) {
+ this.errorMessage = errorMessage;
+ }
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/login/controller/LoginApi.java b/security/src/main/java/com/mfsys/client/africa/middleware/login/controller/LoginApi.java
new file mode 100644
index 0000000..699372c
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/login/controller/LoginApi.java
@@ -0,0 +1,68 @@
+/**
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech) (4.2.3).
+ * https://openapi-generator.tech
+ * Do not edit the class manually.
+ */
+package com.mfsys.client.africa.middleware.login.controller;
+
+import java.time.OffsetDateTime;
+import java.util.Optional;
+
+import jakarta.validation.Valid;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.NativeWebRequest;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+@jakarta.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2022-06-22T10:48:53.261561+05:00[Asia/Karachi]")
+
+@RestController
+@Validated
+@Api(value = "Login", description = "the Login API")
+public interface LoginApi {
+
+ default Optional getRequest() {
+ return Optional.empty();
+ }
+
+ /**
+ * POST /login : Third Party Authentication
+ *
+ * @param clientId (required)
+ * @param clientKey (required)
+ * @param channel (required)
+ * @param contentType (required)
+ * @param body (optional)
+ * @return OK (status code 200)
+ * or Bad request. (status code 400)
+ * or Authorization information is missing or invalid. (status code 401)
+ * or Not found. (status code 404)
+ */
+ @ApiOperation(value = "Third Party Authentication", nickname = "login", notes = "", response = OffsetDateTime.class, tags={ "Login", })
+ @ApiResponses(value = {
+ @ApiResponse(code = 200, message = "OK", response = OffsetDateTime.class),
+ @ApiResponse(code = 400, message = "Bad request."),
+ @ApiResponse(code = 401, message = "Authorization information is missing or invalid."),
+ @ApiResponse(code = 404, message = "Not found.") })
+ @RequestMapping(value = "/login",
+ produces = { "application/json" },
+ consumes = { "application/json" },
+ method = RequestMethod.POST)
+ default ResponseEntity login(@ApiParam(value = "" ,required=true) @RequestHeader(value="clientId", required=true) String clientId,@ApiParam(value = "" ,required=true) @RequestHeader(value="clientKey", required=true) String clientKey,@ApiParam(value = "" ,required=true) @RequestHeader(value="channel", required=true) String channel,@ApiParam(value = "" ,required=true) @RequestHeader(value="contentType", required=true) String contentType,@ApiParam(value = "" ) @Valid @RequestBody(required = false) String body) {
+ return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED);
+
+ }
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/login/service/LoginService.java b/security/src/main/java/com/mfsys/client/africa/middleware/login/service/LoginService.java
new file mode 100644
index 0000000..67522e7
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/login/service/LoginService.java
@@ -0,0 +1,26 @@
+package com.mfsys.client.africa.middleware.login.service;
+
+import java.time.OffsetDateTime;
+
+import jakarta.validation.Valid;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+
+import com.mfsys.client.africa.middleware.login.controller.LoginApi;
+
+import io.swagger.annotations.ApiParam;
+
+@Service
+public class LoginService implements LoginApi{
+
+ @Override
+ public ResponseEntity login(@ApiParam(value = "" ,required=true) @RequestHeader(value="clientId", required=true) String clientId,@ApiParam(value = "" ,required=true) @RequestHeader(value="clientKey", required=true) String clientKey,@ApiParam(value = "" ,required=true) @RequestHeader(value="channel", required=true) String channel,@ApiParam(value = "" ,required=true) @RequestHeader(value="contentType", required=true) String contentType,@ApiParam(value = "" ) @Valid @RequestBody(required = false) String body) {
+ OffsetDateTime offsetDT = OffsetDateTime.now();
+ System.out.println(offsetDT);
+ return ResponseEntity.ok(offsetDT);
+
+ }
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagament/repo/UserManagementRepo.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagament/repo/UserManagementRepo.java
new file mode 100644
index 0000000..e20d765
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagament/repo/UserManagementRepo.java
@@ -0,0 +1,42 @@
+package com.mfsys.client.africa.middleware.usermanagament.repo;
+
+import com.mfsys.client.africa.middleware.usermanagement.model.UserManagement;
+import com.mfsys.client.africa.middleware.usermanagement.model.UserManagementId;
+import java.util.List;
+
+import jakarta.transaction.Transactional;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+public interface UserManagementRepo extends JpaRepository {
+
+ public List findAllByPorOrgacode(String porOrgaCode);
+
+ public UserManagement findByPorOrgacodeAndUserIdAndUserPassword(String porOrgaCode, String userId, String password);
+
+ public UserManagement findByPorOrgacodeAndUserId(String orgacode,String userId);
+
+ @Modifying
+ @Transactional
+ @Query(value = "UPDATE user_management SET first_login=?4,user_password=?2 WHERE user_id=?1 AND por_orgacode=?3", nativeQuery = true)
+ public void updatePassword(String userId, String newPassword,String orgaCode, boolean firstLogin);
+
+ @Modifying
+ @Transactional
+ @Query(value = "UPDATE user_management SET permissions=?2 WHERE user_id=?1 AND por_orgacode=?3", nativeQuery = true)
+ public void updatePermission(String userId, String Permission,String porOrgaCode);
+
+ @Modifying
+ @Transactional
+ @Query(value = "UPDATE user_management SET user_name=?2,user_contact_number=?4,user_home_branch=?5,user_role=?6 WHERE user_id=?1 AND por_orgacode=?3", nativeQuery = true)
+ public void updateUser(String userId, String name, String porOrgaCode, String phoneNumber, String homeBranch, String role);
+
+ @Query(value = "UPDATE user_management SET failed_attempt = ?1 WHERE user_id = ?2" ,nativeQuery = true)
+ @Modifying
+ @Transactional
+ public void updateFailedAttempts(int failAttempts, String user_id);
+
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/controller/UserManagementController.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/controller/UserManagementController.java
new file mode 100644
index 0000000..6469286
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/controller/UserManagementController.java
@@ -0,0 +1,93 @@
+package com.mfsys.client.africa.middleware.usermanagement.controller;
+
+import com.mfsys.client.africa.middleware.usermanagement.model.UserCred;
+import com.mfsys.client.africa.middleware.usermanagement.model.UserManagement;
+import com.mfsys.client.africa.middleware.usermanagement.service.UserManagementService;
+import java.util.Base64;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.mfsys.filter.RefreshToken;
+
+@RestController
+public class UserManagementController {
+ @Autowired
+ UserManagementService userManagementService;
+
+ @PostMapping("/usermanagement")
+ public ResponseEntity> createUser(@RequestBody UserManagement userManagement) {
+
+ return userManagementService.saveUser(userManagement);
+ }
+
+ @GetMapping("/usermanagement")
+ public List getUser(@RequestParam(value = "porOrgacode", required = true) String porOrgacode)
+ {
+ return userManagementService.showAllUsers(porOrgacode);
+
+ }
+
+ @DeleteMapping("/usermanagement")
+ public void deleteUser(@RequestBody UserManagement userManagement)
+ {
+ userManagementService.deleteUser(userManagement);
+
+ }
+
+ @PutMapping("/usermanagement")
+ public void updateUser(@RequestBody UserManagement userManagement) {
+
+ userManagementService.updateUser(userManagement.getUserId(),userManagement.getUserName(),userManagement.getPorOrgacode(),userManagement.getUserContactNumber(),userManagement.getUserHomeBranch(),userManagement.getUserRole());
+ }
+
+ @PostMapping("/loginUser")
+ public ResponseEntity> userAuthentication(@RequestBody UserManagement userManagement) throws Exception {
+ System.out.println(userManagement.getUserId());
+ byte[] decodedBytes = Base64.getDecoder().decode(userManagement.getUserPassword());
+ String decodedString = new String(decodedBytes);
+
+ return userManagementService.userAuthentication(userManagement.getUserId(), decodedString,userManagement.getPorOrgacode());
+ }
+ @PostMapping("/refreshToken")
+ public ResponseEntity refreshToken(@RequestBody UserCred uCred ) {
+ return new ResponseEntity(userManagementService.refreshToken(uCred.getToken(), uCred.getCmpUserId(), uCred.getPorOrgacode()),HttpStatus.OK);
+
+ }
+
+ @PostMapping("/changepassword")
+ public ResponseEntity> update(@RequestBody UserManagement userManagement) {
+
+ return userManagementService.updatePassword(userManagement.getUserId(),userManagement.getUserPassword(),userManagement.getPorOrgacode());
+ }
+
+ @PutMapping("/updatePermissions")
+ public void updatePermissions(@RequestBody UserManagement userManagement) {
+
+ userManagementService.updatePermissions(userManagement.getUserId(),userManagement.getPermissions(),userManagement.getPorOrgacode());
+ }
+
+ @PostMapping("/getPermissions/{userId}/{porOrgacode}")
+ public String getPermissions(@PathVariable String userId, @PathVariable String porOrgacode) {
+ return userManagementService.getPermissions(userId, porOrgacode);
+ }
+
+ @PostMapping("/changeUserPassword")
+ public ResponseEntity> changeUserPassword(@RequestParam(value = "oldPassword", required = true) String oldPassword,@RequestBody UserManagement userManagement) {
+
+ return userManagementService.changeUserPassword(userManagement.getUserId(),userManagement.getUserPassword(),userManagement.getPorOrgacode(),oldPassword);
+ }
+
+
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserCred.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserCred.java
new file mode 100644
index 0000000..08351cc
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserCred.java
@@ -0,0 +1,38 @@
+package com.mfsys.client.africa.middleware.usermanagement.model;
+
+public class UserCred {
+ private String cmpUserId;
+ private String porOrgacode;
+ private String token;
+
+
+ public String getCmpUserId() {
+ return cmpUserId;
+ }
+ public void seCmptUserId(String userId) {
+ this.cmpUserId = userId;
+ }
+ public String getPorOrgacode() {
+ return porOrgacode;
+ }
+ public void setPorOrgacode(String porOrgacode) {
+ this.porOrgacode = porOrgacode;
+ }
+ public String getToken() {
+ return token;
+ }
+ public void setToken(String token) {
+ this.token = token;
+ }
+ public UserCred(String cmpUserId, String porOrgacode, String token) {
+ super();
+ this.cmpUserId = cmpUserId;
+ this.porOrgacode = porOrgacode;
+ this.token = token;
+ }
+ public UserCred() {
+ super();
+ }
+
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserManagement.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserManagement.java
new file mode 100644
index 0000000..6c78b33
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserManagement.java
@@ -0,0 +1,161 @@
+package com.mfsys.client.africa.middleware.usermanagement.model;
+
+import java.util.Date;
+
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Id;
+import jakarta.persistence.IdClass;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.mfsys.constant.FieldNameLength;
+
+@Entity
+@IdClass(UserManagementId.class)
+public class UserManagement {
+
+ @Id
+ @JsonProperty("porOrgacode")
+ private String porOrgacode;
+
+ @Id
+ @JsonProperty("userId")
+ private String userId;
+
+ @JsonProperty("userName")
+ private String userName;
+
+ @JsonProperty("userHomeBranch")
+ private String userHomeBranch;
+
+ @JsonProperty("userContactNumber")
+ private String userContactNumber;
+
+ @JsonProperty("userPassword")
+ private String userPassword;
+
+ @JsonProperty("userRole")
+ private String userRole;
+
+ @JsonProperty("firstLogin")
+ private Boolean firstLogin;
+
+ @Column(columnDefinition = FieldNameLength.CODE_10000)
+ @JsonProperty("permissions")
+ private String permissions;
+
+ // --------------login retry--------------- //
+
+ private boolean accountNonLocked=true;
+
+ private int failedAttempt;
+
+ private Date lockTime;
+
+
+
+ public String getPermissions() {
+ return permissions;
+ }
+
+ public void setPermissions(String permissions) {
+ this.permissions = permissions;
+ }
+
+ public String getPorOrgacode() {
+ return porOrgacode;
+ }
+
+ public void setPorOrgacode(String porOrgacode) {
+ this.porOrgacode = porOrgacode;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getUserHomeBranch() {
+ return userHomeBranch;
+ }
+
+ public void setUserHomeBranch(String userHomeBranch) {
+ this.userHomeBranch = userHomeBranch;
+ }
+
+ public String getUserContactNumber() {
+ return userContactNumber;
+ }
+
+ public void setUserContactNumber(String userContactNumber) {
+ this.userContactNumber = userContactNumber;
+ }
+
+ public String getUserPassword() {
+ return userPassword;
+ }
+
+ public void setUserPassword(String userPassword) {
+ this.userPassword = userPassword;
+ }
+
+ public String getUserRole() {
+ return userRole;
+ }
+
+ public void setUserRole(String userRole) {
+ this.userRole = userRole;
+ }
+
+ public Boolean isFirstLogin() {
+
+ return firstLogin;
+ }
+
+ public void setFirstLogin(Boolean firstLogin) {
+ this.firstLogin = firstLogin;
+ }
+
+
+
+
+ //-----------setter getter ---------------//
+
+
+ public boolean isAccountNonLocked() {
+ return accountNonLocked;
+ }
+
+ public void setAccountNonLocked(boolean accountNonLocked) {
+ this.accountNonLocked = accountNonLocked;
+ }
+
+ public int getFailedAttempt() {
+ return failedAttempt;
+ }
+
+ public void setFailedAttempt(int failedAttempt) {
+ this.failedAttempt = failedAttempt;
+ }
+
+ public Date getLockTime() {
+ return lockTime;
+ }
+
+ public void setLockTime(Date lockTime) {
+ this.lockTime = lockTime;
+ }
+
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserManagementId.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserManagementId.java
new file mode 100644
index 0000000..dedd769
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserManagementId.java
@@ -0,0 +1,35 @@
+package com.mfsys.client.africa.middleware.usermanagement.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+
+public class UserManagementId implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ @JsonProperty("porOrgacode")
+ String porOrgacode;
+
+ @JsonProperty("userId")
+ String userId;
+
+ public String getPorOrgacode() {
+ return porOrgacode;
+ }
+
+ public void setPorOrgacode(String porOrgacode) {
+ this.porOrgacode = porOrgacode;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserPermission.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserPermission.java
new file mode 100644
index 0000000..d83b4c9
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/model/UserPermission.java
@@ -0,0 +1,50 @@
+package com.mfsys.client.africa.middleware.usermanagement.model;
+
+public class UserPermission {
+
+ private String userId;
+ private String userName;
+ private String userPermission;
+ private boolean firstLogin;
+ private String token;
+
+ public UserPermission(String userId, String userName, String userPermission, boolean firstLogin, String token) {
+ super();
+ this.userId = userId;
+ this.userName = userName;
+ this.userPermission = userPermission;
+ this.firstLogin = firstLogin;
+ this.token = token;
+ }
+ public String getUserId() {
+ return userId;
+ }
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+ public String getUserName() {
+ return userName;
+ }
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+ public String getUserPermission() {
+ return userPermission;
+ }
+ public void setUserPermission(String userPermission) {
+ this.userPermission = userPermission;
+ }
+ public boolean isFirstLogin() {
+ return firstLogin;
+ }
+ public void setFirstLogin(boolean firstLogin) {
+ this.firstLogin = firstLogin;
+ }
+ public String getToken() {
+ return token;
+ }
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+}
diff --git a/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/service/UserManagementService.java b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/service/UserManagementService.java
new file mode 100644
index 0000000..707f684
--- /dev/null
+++ b/security/src/main/java/com/mfsys/client/africa/middleware/usermanagement/service/UserManagementService.java
@@ -0,0 +1,221 @@
+package com.mfsys.client.africa.middleware.usermanagement.service;
+
+import com.mfsys.client.africa.middleware.usermanagement.model.UserManagementId;
+import com.mfsys.client.africa.middleware.usermanagement.model.UserPermission;
+import java.util.Date;
+import java.util.List;
+
+import com.mfsys.service.JwtService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import com.mfsys.filter.RefreshToken;
+import com.mfsys.client.africa.middleware.Error.ErrorClass;
+import com.mfsys.client.africa.middleware.usermanagament.repo.UserManagementRepo;
+import com.mfsys.client.africa.middleware.usermanagement.model.UserManagement;
+import com.mfsys.trust.IncludeAllUrl;
+
+
+
+@Service
+public class UserManagementService {
+
+ @Autowired
+ UserManagementRepo userManagementRepo;
+ @Value("${DefaultUserPassword}")
+ private String defaultPassword;
+
+ @Autowired
+ private JwtService jwt;
+
+ public static final int MAX_FAILED_ATTEMPTS = 4;
+
+ private static final long LOCK_TIME_DURATION = 24 * 60 * 60 * 1000; // 24 hours
+
+// public ResponseEntity> saveUser(UserManagement userManagement) {
+// if(userManagementRepo.findByPorOrgacodeAndUserId(userManagement.getPorOrgacode(), userManagement.getUserId()) != null) {
+// ErrorClass em = new ErrorClass();
+// em.setErrorMessage("UserId Already Exists");
+// return ResponseEntity.ok(em);
+// }
+// userManagement.setUserPassword(this.defaultPassword);
+// userManagement.setFirstLogin(Boolean.TRUE);
+// userManagementRepo.save(userManagement);
+// return ResponseEntity.ok(userManagement);
+//
+// }
+
+ public ResponseEntity saveUser(UserManagement userManagement) {
+ UserManagement existingUser = userManagementRepo.findByPorOrgacodeAndUserId(userManagement.getPorOrgacode(), userManagement.getUserId());
+ if (existingUser != null) {
+ return ResponseEntity.status(HttpStatus.CONFLICT).build();
+ } else {
+ userManagement.setUserPassword(this.defaultPassword);
+ userManagement.setFirstLogin(Boolean.TRUE);
+ userManagementRepo.save(userManagement);
+ return ResponseEntity.ok(userManagement);
+ }
+ }
+
+ public void updateUser(String userId, String name, String porOrgaCode, String phoneNumber, String homeBranch, String role) {
+ userManagementRepo.updateUser(userId, name, porOrgaCode, phoneNumber, homeBranch, role);
+ }
+
+ public List showAllUsers(String porOrgacode)
+ {
+ return userManagementRepo.findAllByPorOrgacode(porOrgacode);
+ }
+
+ public void deleteUser(UserManagement userManagement)
+ {
+ userManagementRepo.delete(userManagement);
+ }
+
+ public ResponseEntity updatePassword(String userId,String newPassword,String orgaCode) {
+ UserManagement user = userManagementRepo.findByPorOrgacodeAndUserId(orgaCode, userId);
+ if (user != null) {
+ userManagementRepo.updatePassword(userId, newPassword, orgaCode, false);
+ return ResponseEntity.ok(true);
+ } else {
+ //em.setErrorMessage("UserId Does Not Exist");
+ return ResponseEntity.notFound().build();
+ }
+ }
+
+ public ResponseEntity changeUserPassword(String userId, String newPassword, String orgaCode, String oldPassword) {
+ UserManagement user = userManagementRepo.findByPorOrgacodeAndUserIdAndUserPassword(orgaCode, userId, oldPassword);
+ if (user != null) {
+ userManagementRepo.updatePassword(userId, newPassword, orgaCode, false);
+ return ResponseEntity.ok(true);
+ } else {
+ return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
+ }
+ }
+
+
+// public ResponseEntity> changeUserPassword(String userId,String newPassword,String orgaCode,String oldPassword) {
+// if (userManagementRepo.findByPorOrgacodeAndUserIdAndUserPassword(orgaCode, userId, oldPassword) != null)
+// {
+// userManagementRepo.updatePassword(userId, newPassword,orgaCode,false);
+// return ResponseEntity.ok(true);
+// }
+// ErrorClass em = new ErrorClass();
+// em.setErrorMessage("Old Password is Incorrect");
+// return ResponseEntity.ok(em);
+//
+// }
+
+public void updatePermissions(String userId,String permissions,String porOrgaCode) {
+
+ userManagementRepo.updatePermission(userId, permissions, porOrgaCode);
+
+
+
+ }
+
+public String getPermissions(String userId, String porOrgacode) {
+
+ UserManagement um = new UserManagement();
+ UserManagementId umi = new UserManagementId();
+ umi.setPorOrgacode(porOrgacode);
+ umi.setUserId(userId);
+ um = userManagementRepo.findById(umi).get();
+
+ return um.getPermissions();
+
+
+
+
+}
+
+
+
+public ResponseEntity> userAuthentication(String userId, String Password, String porOrgacode) {
+ UserManagement um = userManagementRepo.findByPorOrgacodeAndUserIdAndUserPassword(porOrgacode, userId, Password);
+ UserManagement um1 = userManagementRepo.findByPorOrgacodeAndUserId(porOrgacode, userId);
+
+
+ if (um != null) {
+ if (!um1.isAccountNonLocked()) {
+ if (unlockWhenTimeExpired(um1)) {
+ return ResponseEntity.ok(new ErrorClass("Your account has been unlocked. Please try to login again."));
+ }
+ return ResponseEntity.ok(new ErrorClass("Your account has been locked due to 3 failed attempts."
+ + " It will be unlocked after 24 hours."));
+ }
+
+
+
+ um.setAccountNonLocked(true);
+ um.setLockTime(null);
+ um.setFailedAttempt(0);
+ userManagementRepo.save(um);
+ System.out.println(um.getPorOrgacode());
+ String token = jwt.generateToken(um.getUserId());
+ return ResponseEntity.ok(new UserPermission(userId, um.getUserName(), um.getPermissions(), um.isFirstLogin(), token));
+ } else if (um1 != null) {
+ if (um1.isAccountNonLocked()) {
+ if (um1.getFailedAttempt() < MAX_FAILED_ATTEMPTS - 1) {
+ increaseFailedAttempts(um1);
+ } else {
+ lock(um1);
+ return ResponseEntity.ok(new ErrorClass("Your account has been locked due to 3 failed attempts."
+ + " It will be unlocked after 24 hours."));
+ }
+ return ResponseEntity.ok(new ErrorClass("Password is incorrect. "+"you have "+(2-um1.getFailedAttempt())+" Attempts left" ));
+ } else if (!um1.isAccountNonLocked()) {
+ if (unlockWhenTimeExpired(um1)) {
+ return ResponseEntity.ok(new ErrorClass("Your account has been unlocked. Please try to login again." ));
+ }
+ return ResponseEntity.ok(new ErrorClass("Your account has been locked due to 3 failed attempts. It will be unlocked after 24 hours."));
+ }
+ }
+ return ResponseEntity.ok(new ErrorClass("UserId is incorrect"));
+}
+
+ public String refreshToken(String token, String susUsercode, String porOrgacode) {
+ if(susUsercode!=null && token != null && porOrgacode !=null)
+ return jwt.generateRefreshToken( susUsercode);
+ else {
+ return "";
+ }
+}
+
+ public void increaseFailedAttempts(UserManagement user) {
+ int newFailAttempts = user.getFailedAttempt() + 1;
+ userManagementRepo.updateFailedAttempts(newFailAttempts, user.getUserId());
+ }
+
+ public void resetFailedAttempts(String email) {
+ userManagementRepo.updateFailedAttempts(0, email);
+ }
+
+ public void lock(UserManagement user) {
+ user.setAccountNonLocked(false);
+ user.setLockTime(new Date());
+
+ userManagementRepo.save(user);
+ }
+
+ public boolean unlockWhenTimeExpired(UserManagement user) {
+ long lockTimeInMillis = user.getLockTime().getTime();
+ long currentTimeInMillis = System.currentTimeMillis();
+
+ if (lockTimeInMillis + LOCK_TIME_DURATION < currentTimeInMillis) {
+ user.setAccountNonLocked(true);
+ user.setLockTime(null);
+ user.setFailedAttempt(0);
+
+ userManagementRepo.save(user);
+
+ return true;
+ }
+
+ return false;
+ }
+
+
+}