Added Security Module in aConnect-BS
parent
fc07a8e88f
commit
fb7da46316
@ -1,128 +1,134 @@
|
||||
<?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>
|
||||
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>
|
||||
<groupId>com.mfsys</groupId>
|
||||
<artifactId>parent</artifactId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>0.0.1</version>
|
||||
<relativePath>../parent/pom.xml</relativePath>
|
||||
</parent>
|
||||
<groupId>com.mfsys</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<version>0.0.1</version>
|
||||
<name>common</name>
|
||||
<description>GBRSP Project</description>
|
||||
<url/>
|
||||
<licenses>
|
||||
<license/>
|
||||
</licenses>
|
||||
<developers>
|
||||
<developer/>
|
||||
</developers>
|
||||
<scm>
|
||||
<connection/>
|
||||
<developerConnection/>
|
||||
<tag/>
|
||||
<url/>
|
||||
</scm>
|
||||
<properties>
|
||||
<java.version>21</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.modelmapper</groupId>
|
||||
<artifactId>modelmapper</artifactId>
|
||||
<version>3.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<name>common</name>
|
||||
<description>GBRSP Project</description>
|
||||
<url/>
|
||||
<licenses>
|
||||
<license/>
|
||||
</licenses>
|
||||
<developers>
|
||||
<developer/>
|
||||
</developers>
|
||||
<scm>
|
||||
<connection/>
|
||||
<developerConnection/>
|
||||
<tag/>
|
||||
<url/>
|
||||
</scm>
|
||||
<properties>
|
||||
<java.version>21</java.version>
|
||||
</properties>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.modelmapper</groupId>
|
||||
<artifactId>modelmapper</artifactId>
|
||||
<version>3.1.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.33</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mindrot</groupId>
|
||||
<artifactId>jbcrypt</artifactId>
|
||||
<version>0.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
<version>0.12.3</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
<version>8.0.33</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mindrot</groupId>
|
||||
<artifactId>jbcrypt</artifactId>
|
||||
<version>0.4</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-api</artifactId>
|
||||
<version>0.12.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-impl</artifactId>
|
||||
<version>0.12.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson -->
|
||||
<version>0.12.6</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</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>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-impl</artifactId>
|
||||
<version>0.12.3</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt-jackson</artifactId>
|
||||
<version>0.12.3</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.13.0</version>
|
||||
<configuration>
|
||||
<source>21</source>
|
||||
<target>21</target>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.34</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.13.0</version>
|
||||
<configuration>
|
||||
<source>21</source>
|
||||
<target>21</target>
|
||||
<annotationProcessorPaths>
|
||||
<path>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.34</version>
|
||||
</path>
|
||||
</annotationProcessorPaths>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
||||
@ -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 {
|
||||
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 {;
|
||||
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 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 {
|
||||
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 {
|
||||
|
||||
}
|
||||
@ -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.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;
|
||||
@ -1,4 +1,4 @@
|
||||
package com.mfsys.common.configuration.exception;
|
||||
package com.mfsys.exception;
|
||||
|
||||
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.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 DuplicateException(ErrorMessage errCode){
|
||||
@ -1,4 +1,4 @@
|
||||
package com.mfsys.common.configuration.exception;
|
||||
package com.mfsys.exception;
|
||||
|
||||
public interface ErrorMessage {
|
||||
public String getCode();
|
||||
@ -1,4 +1,4 @@
|
||||
package com.mfsys.common.configuration.exception;
|
||||
package com.mfsys.exception;
|
||||
|
||||
public class ExceptionDAO {
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.mfsys.common.configuration.exception;
|
||||
package com.mfsys.exception;
|
||||
|
||||
import org.slf4j.MDC;
|
||||
|
||||
@ -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){
|
||||
@ -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;
|
||||
@ -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,4 +1,4 @@
|
||||
package com.mfsys.common.configuration.model;
|
||||
package com.mfsys.model;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
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.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.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;
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
package com.mfsys.common.configuration.service;
|
||||
package com.mfsys.service;
|
||||
|
||||
import org.mindrot.jbcrypt.BCrypt;
|
||||
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.InputStream;
|
||||
@ -1 +0,0 @@
|
||||
|
||||
@ -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());
|
||||
// }
|
||||
}
|
||||
@ -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…
Reference in New Issue