Added Security Module in aConnect-BS

FMFI-Wasi-changes
Wasiullah Khan 1 week ago
parent fc07a8e88f
commit fb7da46316

@ -81,26 +81,32 @@
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId> <artifactId>jjwt-api</artifactId>
<version>0.12.3</version> <version>0.12.6</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId> <artifactId>jjwt-impl</artifactId>
<version>0.12.3</version> <version>0.12.6</version>
<scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>io.jsonwebtoken</groupId> <groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId> <artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson -->
<version>0.12.3</version> <version>0.12.6</version>
<scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.fasterxml.jackson.core</groupId> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
</dependency> </dependency>
<dependency>
<groupId>api.CoreAPI</groupId>
<artifactId>EncryptionAPI</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>

@ -1,5 +0,0 @@
package com.mfsys.common.configuration.constant;
public interface PropertyConstant {
}

@ -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> T extractClaim(String token, Function<Claims, T> 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<String, Object> claims = new HashMap<>();
return createToken(claims, subject, expiration);
}
public String generateRefreshToken(String subject) {
Map<String, Object> claims = new HashMap<>();
return createToken(claims, subject, refreshExpiration);
}
private String createToken(Map<String, Object> 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);
}
}

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.constant; package com.mfsys.constant;
public interface AconnectURI { public interface AconnectURI {
String REFRESH_TOKEN = "/refreshtoken"; String REFRESH_TOKEN = "/refreshtoken";

@ -0,0 +1,8 @@
package com.mfsys.constant;
public interface CustomerStatus {
String CUSTOMER_UNVERIFIED = "Unverified";
String CUSTOMER_VERIFIED = "Verified";
String CUSTOMER_ACTIVE = "Active";
}

@ -0,0 +1,7 @@
package com.mfsys.constant;
public interface DBFieldNameConstant {
String POR_ORGACODE = "POR_ORGACODE";
String PCR_CURRCODE = "PCR_CURRCODE";
}

@ -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'";
}

@ -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 {; public enum ERRCode implements ErrorMessage {;
private String code; private String code;

@ -0,0 +1,6 @@
package com.mfsys.constant;
public interface ErrorMessage {
public String getCode();
public String getDescription();
}

@ -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;
}
}

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.constant; package com.mfsys.constant;
public interface FieldNameLength { public interface FieldNameLength {
@ -20,7 +20,7 @@ public interface FieldNameLength {
String CODE_200 = "VARCHAR(200)"; String CODE_200 = "VARCHAR(200)";
String CODE_500 = "VARCHAR(500)"; String CODE_500 = "VARCHAR(500)";
String CODE_1000 = "VARCHAR(1000)"; String CODE_1000 = "VARCHAR(1000)";
String CODE_10000 = "VARCHAR(10000)";
// Descriptions // Descriptions
String DESCRIPTION_LONG = "VARCHAR(40)"; String DESCRIPTION_LONG = "VARCHAR(40)";
String DESCRIPTION_SHORT = "VARCHAR(20)"; String DESCRIPTION_SHORT = "VARCHAR(20)";

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.constant; package com.mfsys.constant;
public interface FilterPriority { public interface FilterPriority {

@ -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";
}

@ -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;
}
}

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.constant; package com.mfsys.constant;
public interface LoggerURI { public interface LoggerURI {
String GET_LOGS_BY_DATES = "/logs/getByDate"; String GET_LOGS_BY_DATES = "/logs/getByDate";

@ -0,0 +1,5 @@
package com.mfsys.constant;
public class MicroserviceBaseURI {
public static final String MConnect = "/MCONNECT";
}

@ -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;
}
}

@ -0,0 +1,6 @@
package com.mfsys.constant;
public interface NotificationMessage {
public String getCode();
public String getDescription();
}

@ -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<String, OnlineBankingERRCode> mapper = new HashMap<String, OnlineBankingERRCode>();
public static OnlineBankingERRCode getErrorCode(String code) {
return mapper.get(code);
}
public static Set<String> getErrorCodes() {
return Collections.unmodifiableSet(mapper.keySet());
}
static {
for (OnlineBankingERRCode error : EnumSet.allOf(OnlineBankingERRCode.class)) {
mapper.put(error.getCode(), error);
}
}
}
}

@ -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;
}
}

@ -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";
}

@ -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";
}

@ -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";
}

@ -0,0 +1,8 @@
package com.mfsys.constant;
public interface PinStatus {
String PIN_UNVERIFIED = "Unverified";
String PIN_VERIFIED = "Verified";
String PIN_EXPIRED = "Expired";
}

@ -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<String, PinType> mapper = new HashMap<String, PinType>();
public static PinType getPinType(String code) {
return mapper.get(code);
}
public static Set<String> getPinTypes() {
return Collections.unmodifiableSet(mapper.keySet());
}
static {
for (PinType pin : EnumSet.allOf(PinType.class)) {
mapper.put(pin.getCode(), pin);
}
}
}
}

@ -0,0 +1,5 @@
package com.mfsys.constant;
public interface PropertyConstant {
}

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.constant; package com.mfsys.constant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@ -7,6 +7,7 @@ import java.util.List;
public interface TokenBypassURI { public interface TokenBypassURI {
List<String> URIs = new ArrayList<String>(Arrays.asList( List<String> URIs = new ArrayList<String>(Arrays.asList(
"/aconnect/signin", "/aconnect/signin",
"/aconnect/loginUser",
"/aconnect/transactions/accounttogl", "/aconnect/transactions/accounttogl",
"/aconnect/account/miscDetails", "/aconnect/account/miscDetails",
"/deposit/account/miscDetails", "/deposit/account/miscDetails",
@ -23,7 +24,8 @@ public interface TokenBypassURI {
"/aconnect/generalledger/transactions/reversal", "/aconnect/generalledger/transactions/reversal",
"/aconnect/deposit/transactions/rejection", "/aconnect/deposit/transactions/rejection",
"/aconnect/generalledger/transactions/rejection" "/aconnect/generalledger/transactions/rejection",
"/aconnect/generate"
)); ));
} }

@ -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";
}

@ -1,8 +1,8 @@
package com.mfsys.common.configuration.controller; package com.mfsys.controller;
import com.mfsys.common.configuration.constant.LoggerURI; import com.mfsys.constant.LoggerURI;
import com.mfsys.common.configuration.model.Logger; import com.mfsys.model.Logger;
import com.mfsys.common.configuration.service.LoggerService; import com.mfsys.service.LoggerService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
import java.text.MessageFormat; import java.text.MessageFormat;

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

@ -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);
}
}

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
public class DuplicateException extends ApplicationException { public class DuplicateException extends ApplicationException {
public DuplicateException(ErrorMessage errCode){ public DuplicateException(ErrorMessage errCode){

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
public interface ErrorMessage { public interface ErrorMessage {
public String getCode(); public String getCode();

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
public class ExceptionDAO { public class ExceptionDAO {

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
import org.slf4j.MDC; import org.slf4j.MDC;

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.exception; package com.mfsys.exception;
public class ResourceNotFoundException extends ApplicationException { public class ResourceNotFoundException extends ApplicationException {
public ResourceNotFoundException(String porOrgacode, ErrorMessage errCode){ public ResourceNotFoundException(String porOrgacode, ErrorMessage errCode){

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.filter; package com.mfsys.filter;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
@ -12,7 +12,7 @@ import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.SecretKeySpec;
import com.mfsys.common.configuration.constant.FilterPriority; import com.mfsys.constant.FilterPriority;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ReadListener; import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;

@ -1,9 +1,9 @@
package com.mfsys.common.configuration.filter; package com.mfsys.filter;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.mfsys.common.configuration.constant.FilterPriority; import com.mfsys.constant.FilterPriority;
import com.mfsys.common.configuration.model.Logger; import com.mfsys.model.Logger;
import com.mfsys.common.configuration.repository.LoggerRepository; import com.mfsys.repository.LoggerRepository;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;

@ -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;
}
}

@ -1,11 +1,10 @@
package com.mfsys.common.configuration.filter; package com.mfsys.filter;
import java.io.IOException; import java.io.IOException;
import java.util.Objects; import java.util.Objects;
import com.mfsys.common.configuration.constant.PropertyConstant; import com.mfsys.constant.TokenBypassURI;
import com.mfsys.common.configuration.constant.TokenBypassURI; import com.mfsys.service.JwtService;
import com.mfsys.common.configuration.service.JwtService;
import jakarta.servlet.FilterChain; import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException; import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -17,7 +16,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.filter.OncePerRequestFilter;
import com.mfsys.common.configuration.constant.FilterPriority; import com.mfsys.constant.FilterPriority;
@Component @Component
@Order(FilterPriority.AUTHENTICATION) @Order(FilterPriority.AUTHENTICATION)

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.model; package com.mfsys.model;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;

@ -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.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;

@ -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> T extractClaim(String token, Function<Claims, T> 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<String, Object> claims = new HashMap<>();
return createToken(claims, subject, expiration);
}
public String generateRefreshToken(String subject) {
Map<String, Object> claims = new HashMap<>();
return createToken(claims, subject, refreshExpiration);
}
private String createToken(Map<String, Object> 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);
}
}

@ -1,7 +1,7 @@
package com.mfsys.common.configuration.service; package com.mfsys.service;
import com.mfsys.common.configuration.model.Logger; import com.mfsys.model.Logger;
import com.mfsys.common.configuration.repository.LoggerRepository; import com.mfsys.repository.LoggerRepository;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.service; package com.mfsys.service;
import org.mindrot.jbcrypt.BCrypt; import org.mindrot.jbcrypt.BCrypt;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;

@ -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;
}

@ -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<String> urls;
protected final String type;
public DefaultUrl(@JsonProperty("urls") List<String> urls, @JsonProperty("type") String type) {
this.urls = createUrlList(urls);
this.type = type;
}
private List<String> createUrlList(List<String> urls) {
return Collections.unmodifiableList(urls);
}
@Override
public List<String> getUrls() {
return urls;
}
@Override
public String getType() {
return type;
}
}

@ -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());
}
}

@ -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();
// }
//
//}

@ -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;
}

@ -0,0 +1,8 @@
package com.mfsys.trust;
import java.util.List;
public interface Urls {
public List<String> getUrls();
public String getType();
}

@ -1,4 +1,4 @@
package com.mfsys.common.configuration.util; package com.mfsys.util;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;

@ -85,23 +85,23 @@
</dependency> </dependency>
<!-- JWT --> <!-- JWT -->
<dependency> <!-- <dependency>-->
<groupId>io.jsonwebtoken</groupId> <!-- <groupId>io.jsonwebtoken</groupId>-->
<artifactId>jjwt-api</artifactId> <!-- <artifactId>jjwt-api</artifactId>-->
<version>0.12.3</version> <!-- <version>0.12.3</version>-->
</dependency> <!-- </dependency>-->
<dependency> <!-- <dependency>-->
<groupId>io.jsonwebtoken</groupId> <!-- <groupId>io.jsonwebtoken</groupId>-->
<artifactId>jjwt-impl</artifactId> <!-- <artifactId>jjwt-impl</artifactId>-->
<version>0.12.3</version> <!-- <version>0.12.3</version>-->
<scope>runtime</scope> <!-- <scope>runtime</scope>-->
</dependency> <!-- </dependency>-->
<dependency> <!-- <dependency>-->
<groupId>io.jsonwebtoken</groupId> <!-- <groupId>io.jsonwebtoken</groupId>-->
<artifactId>jjwt-jackson</artifactId> <!-- <artifactId>jjwt-jackson</artifactId>-->
<version>0.12.3</version> <!-- <version>0.12.3</version>-->
<scope>runtime</scope> <!-- <scope>runtime</scope>-->
</dependency> <!-- </dependency>-->
<!-- Testing --> <!-- Testing -->
<dependency> <dependency>
@ -132,6 +132,7 @@
<groupId>org.springframework</groupId> <groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId> <artifactId>spring-context</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>

@ -2,7 +2,7 @@ package com.mfsys.aconnect.client.controller;
import com.mfsys.aconnect.client.dto.SigninRequest; import com.mfsys.aconnect.client.dto.SigninRequest;
import com.mfsys.aconnect.client.service.LoginService; 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.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;

@ -2,7 +2,7 @@ package com.mfsys.aconnect.client.controller;
import com.mfsys.aconnect.client.dto.*; import com.mfsys.aconnect.client.dto.*;
import com.mfsys.aconnect.client.service.TransactionService; 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.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;

@ -14,7 +14,7 @@ import java.time.LocalDate;
import java.util.Map; 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 @Service

@ -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());
// }
}

@ -1,7 +1,7 @@
package com.mfsys.aconnect.security.service; package com.mfsys.aconnect.security.service;
import com.mfsys.common.configuration.service.JwtService; import com.mfsys.service.JwtService;
import com.mfsys.common.configuration.service.PasswordEncryptionService; import com.mfsys.service.PasswordEncryptionService;
import com.mfsys.aconnect.security.dto.LoginRequest; import com.mfsys.aconnect.security.dto.LoginRequest;
import com.mfsys.aconnect.security.dto.LoginResponse; import com.mfsys.aconnect.security.dto.LoginResponse;
import com.mfsys.aconnect.usermanagement.model.User; import com.mfsys.aconnect.usermanagement.model.User;

@ -1,7 +1,7 @@
package com.mfsys.aconnect.usermanagement.filter; package com.mfsys.aconnect.usermanagement.filter;
import com.mfsys.common.configuration.constant.FilterPriority; import com.mfsys.constant.FilterPriority;
import com.mfsys.common.configuration.constant.TokenBypassURI; import com.mfsys.constant.TokenBypassURI;
import com.mfsys.aconnect.configuration.service.RequestRateLimiterService; import com.mfsys.aconnect.configuration.service.RequestRateLimiterService;
import com.mfsys.aconnect.usermanagement.model.Role; import com.mfsys.aconnect.usermanagement.model.Role;
import com.mfsys.aconnect.usermanagement.model.User; import com.mfsys.aconnect.usermanagement.model.User;

@ -1,6 +1,6 @@
package com.mfsys.aconnect.usermanagement.service; 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.dto.UserDTOs;
import com.mfsys.aconnect.usermanagement.model.User; import com.mfsys.aconnect.usermanagement.model.User;
import com.mfsys.aconnect.usermanagement.repository.UserRepository; import com.mfsys.aconnect.usermanagement.repository.UserRepository;

@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
jwt.secret = mySecretKey123456789012345678901234567890 jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000 jwt.expiration = 86400000
jwt.refresh-expiration= 604800000 jwt.refresh-expiration= 604800000

@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
jwt.secret = mySecretKey123456789012345678901234567890 jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000 jwt.expiration = 86400000
jwt.refresh-expiration= 604800000 jwt.refresh-expiration= 604800000

@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
jwt.secret = mySecretKey123456789012345678901234567890 jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000 jwt.expiration = 86400000
jwt.refresh-expiration= 604800000 jwt.refresh-expiration= 604800000

@ -15,7 +15,7 @@ spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
jwt.secret = mySecretKey123456789012345678901234567890 jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000 jwt.expiration = 86400000
jwt.refresh-expiration= 604800000 jwt.refresh-expiration= 604800000

@ -14,8 +14,8 @@ spring.jpa.properties.hibernate.connection.CharSet=utf-8
spring.jpa.properties.hibernate.connection.useUnicode=true spring.jpa.properties.hibernate.connection.useUnicode=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update spring.jpa.hibernate.ddl-auto=update
#
jwt.secret = mySecretKey123456789012345678901234567890 jwt.secret = KJH72hs8&2jdhA92hd82HDh92Hdh812hd91HDh92!-HSjD92hD9D2hs7dh2HS8dhs72hds
jwt.expiration = 86400000 jwt.expiration = 86400000
jwt.refresh-expiration= 604800000 jwt.refresh-expiration= 604800000
@ -47,18 +47,18 @@ jwt.refresh-expiration= 604800000
#app.organization.uri=0005 #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}
# ${CMB_SQL_DB_USER} # ${CMB_SQL_DB_USER}
#app.deposit.uri=http://localhost:9095 app.deposit.uri=http://localhost:9095
#app.generalledger.uri=http://localhost:9093 app.generalledger.uri=http://localhost:9093
#app.organization.uri=0005 app.organization.uri=0005
app.deposit.uri=${CMB_DEPOSIT_SERVER_URL} #app.deposit.uri=${CMB_DEPOSIT_SERVER_URL}
app.generalledger.uri=${CMB_GL_SERVER_URL} #app.generalledger.uri=${CMB_GL_SERVER_URL}
app.organization.uri=${CMB_ORGA_CODE} #app.organization.uri=${CMB_ORGA_CODE}
app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user #app.security.uri=${CMB_SECURITY_SERVER_URL}/security/auth/user
# Deposit URLs # 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.dev.generalLedgerUri=http://localhost:9093/generalledger
#app.environment.uat.generalLedgerUri=http://uat-gl-server:9093/generalledger #app.environment.uat.generalLedgerUri=http://uat-gl-server:9093/generalledger
#app.environment.live.generalLedgerUri=https://live-gl-server.com/generalledger #app.environment.live.generalLedgerUri=https://live-gl-server.com/generalledger
app.jwtIssuer = MFSys
app.jwtSecretKey = U6YLGV8ODCBPqpdZK05SKtR0xSXZPg4lrzF7EeIkB71qU1wUWvEEglwYjd0l0Gen4E+gT4MzsbWgqLBNHwwV6A==
app.jwtExpirationMs = 180000
app.jwtMaxIdleMs=7200000

@ -29,10 +29,12 @@
</scm> </scm>
<properties> <properties>
<java.version>21</java.version> <java.version>21</java.version>
<swagger-annotations-version>1.6.2</swagger-annotations-version>
</properties> </properties>
<modules> <modules>
<module>../common</module> <module>../common</module>
<module>../econnect</module> <module>../econnect</module>
<module>../security</module>
</modules> </modules>
<dependencies> <dependencies>
<dependency> <dependency>

@ -0,0 +1 @@
/target/

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.mfsys</groupId>
<artifactId>parent</artifactId>
<version>0.0.1</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>
<artifactId>security</artifactId>
<build>
<finalName>security</finalName>
</build>
<dependencies>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger-annotations-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- <dependency>
<groupId>thirdparty</groupId>
<artifactId>common</artifactId>
<version>${mfsys-cloud}</version>
</dependency>-->
<dependency>
<groupId>com.mfsys</groupId>
<artifactId>common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

@ -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;
}
}

@ -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<NativeWebRequest> 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<OffsetDateTime> 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);
}
}

@ -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<OffsetDateTime> 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);
}
}

@ -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 <UserManagement, UserManagementId> {
public List<UserManagement> 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);
}

@ -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<UserManagement> 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<String> refreshToken(@RequestBody UserCred uCred ) {
return new ResponseEntity<String>(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);
}
}

@ -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();
}
}

@ -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;
}
}

@ -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;
}
}

@ -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;
}
}

@ -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<UserManagement> 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<UserManagement> showAllUsers(String porOrgacode)
{
return userManagementRepo.findAllByPorOrgacode(porOrgacode);
}
public void deleteUser(UserManagement userManagement)
{
userManagementRepo.delete(userManagement);
}
public ResponseEntity<Boolean> 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<Boolean> 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;
}
}
Loading…
Cancel
Save