`feat: updated config files, database connection, and rtgs service to support uat environment and encryption/decryption`

main
Josh 1 year ago
parent 8fcc5c21b5
commit d268570e1e

@ -1,9 +1,9 @@
server:
port: 3100
db:
type: 'postgres'
port: '5434'
sid: 'appliq-dummy'
type: ''
port: ''
sid: ''
jwt:
@ -15,5 +15,7 @@ otp:
crypto:
accessToken: 'accessToken@#123'
refreshToken: 'refreshToken@#123'
commonKey: 'APPLIQ'
commonKey: 'RTGS'
sibKey : 'BPXEUYLSSLHUVETSJENXTCRAYNVEJBFRAV'
sibIv : 'IWUHTQDKCWEXWIJENXTCRAYNVEJBFRAV'

@ -1,8 +1,8 @@
db:
host: '161.97.157.52'
username: 'postgres'
password: 'inv123'
sid: 'appliq-dummy'
host: ''
username: ''
password: ''
sid: ''
synchronize: false
jwt:

@ -1,12 +1,21 @@
[
{
"VAN": "KGZASCB",
"tag": "scb-dev",
"tag": "uat",
"host": "111.92.84.50",
"username": "corepacs",
"password": "corepacs",
"sid": "pacs",
"port":1521,
"bankName":"KANGAZHA_SCB_UAT"
}, {
"VAN": "KGZASCB",
"tag": "live",
"host": "103.160.232.13",
"username": "corepacs",
"password": "corepacs",
"sid": "pacs",
"port":1521,
"bankName":"KANGAZHA_SCB"
}
}
]

23599
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -33,6 +33,7 @@
"@nestjs/typeorm": "^9.0.1",
"@types/passport-jwt": "^3.0.8",
"config": "^3.3.9",
"crypto-js": "^4.2.0",
"npm": "^9.8.1",
"oracledb": "^5.1.0",
"rimraf": "^3.0.2",

@ -3,10 +3,6 @@ import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import * as config from 'config';
import { PassportModule } from '@nestjs/passport';
const jwtConfig = config.get('jwt');
@Module({
imports: [],
controllers: [AuthController],

@ -0,0 +1,48 @@
import { Injectable } from '@nestjs/common';
const crypto = require('crypto');
@Injectable()
export class CryptoService {
constructor() { }
encrypt(plainText, secretKey, iv) {
try {
if (typeof plainText !== 'string') {
plainText = JSON.stringify(plainText);
}
const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(secretKey.substring(0, 32), 'utf8'), Buffer.from(iv.substring(0, 16), 'utf8'));
let encrypted = cipher.update(plainText, 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
} catch (error) {
console.error('Encryption failed:', error.message); // Log any error during encryption
throw new Error('Encryption failed');
}
}
decrypt(encryptedValue, secretKey, iv) {
try {
// console.log("encryptedValue--",encryptedValue);
// console.log("secretKey--",secretKey);
// console.log("iv--",iv);
const key = Buffer.from(secretKey.substring(0, 32), 'utf-8'); // AES-256 key size
const ivBuffer = Buffer.from(iv.substring(0, 16), 'utf-8'); // AES-CBC IV size
const encryptedBuffer = Buffer.from(encryptedValue, 'hex');
const decipher = crypto.createDecipheriv('aes-256-cbc', key, ivBuffer);
let decrypted = decipher.update(encryptedBuffer);
decrypted = Buffer.concat([decrypted, decipher.final()]);
return decrypted.toString('utf-8');
} catch (error) {
console.error('Decryption failed:', error.message);
throw new Error('Decryption failed');
}
}
}

@ -1,15 +1,15 @@
import { BadRequestException } from '@nestjs/common';
import * as database from 'data/database.json';
const oracledb = require('oracledb');
export async function connectOraDatabase(VAN:string){
console.log('~~~~Bank Code',VAN);
export async function connectOraDatabase(tag:string){
console.log('~~~~tag Code',tag);
let connection
let config = database.filter(data => {
return data.VAN == VAN
return data.tag == tag
});
if (!config[0])
throw new BadRequestException('Invalid Bank Code')
throw new BadRequestException('Invalid tag Code')
let dbConfig = config[0]
try {
@ -18,7 +18,7 @@ export async function connectOraDatabase(VAN:string){
password: dbConfig.password,
connectString: `${dbConfig.host}/${dbConfig.sid}`
});
console.log(`created connection ${new Date} BANK:${VAN} NAME: ${dbConfig.tag}`);
console.log(`created connection ${new Date} BANK:${dbConfig.bankName} NAME: ${dbConfig.tag}`);
} catch (err) {

@ -1,18 +1,43 @@
import { Body, Controller, Post } from '@nestjs/common';
import { RtgsService } from './rtgs.service';
import { rtgsDto } from 'src/dto/rtgs.dto';
import { CryptoService } from 'src/auth/crypto.service';
import * as config from 'config';
@Controller('rtgs')
export class RtgsController {
constructor(private readonly rtgsService: RtgsService) {}
constructor(
private readonly rtgsService: RtgsService,
private cryptoService : CryptoService
) {}
@Post()
async createRtgs(@Body() rtgsDto: rtgsDto): Promise<any>{
return await this.rtgsService.rtgsEntryPosting(rtgsDto)
return await this.rtgsService.rtgsEntryPosting(rtgsDto,"live")
}
@Post('validation')
async validatingRtgs(@Body() rtgsDto: rtgsDto): Promise<any>{
return await this.rtgsService.validatingRtgs(rtgsDto)
return await this.rtgsService.validatingRtgs(rtgsDto,"live")
}
@Post('uat')
async createRtgsUat(@Body() rtgsDto: rtgsDto): Promise<any>{
return await this.rtgsService.rtgsEntryPosting(rtgsDto,"uat")
}
@Post('validation/uat')
async validatingRtgsUat(@Body() rtgsDto: rtgsDto): Promise<any>{
return await this.rtgsService.validatingRtgs(rtgsDto,"uat")
}
@Post('encrypt')
async encryptRtgs(@Body() body: any): Promise<any>{
return await this.cryptoService.encrypt(body,config.get('crypto').sibKey,config.get('crypto').sibIv)
}
@Post('decrypt')
async decryptRtgs(@Body() body: any): Promise<any>{
return await this.cryptoService.decrypt(body.data,config.get('crypto').sibKey,config.get('crypto').sibIv)
}
}

@ -1,9 +1,10 @@
import { Module } from '@nestjs/common';
import { RtgsController } from './rtgs.controller';
import { RtgsService } from './rtgs.service';
import { CryptoService } from 'src/auth/crypto.service';
@Module({
controllers: [RtgsController],
providers: [RtgsService]
providers: [RtgsService,CryptoService]
})
export class RtgsModule {}

@ -1,23 +1,38 @@
import { Injectable } from '@nestjs/common';
import { CryptoService } from 'src/auth/crypto.service';
import { rtgsDto } from 'src/dto/rtgs.dto';
import { closeOraConnection, connectOraDatabase } from 'src/pipe/connection.pipe';
const oracledb = require('oracledb');
import * as config from 'config';
@Injectable()
export class RtgsService {
async rtgsEntryPosting(data: rtgsDto) {
const connection = await this.createConnection(data.VAN);
console.log("hereeeee", data.date);
constructor(
private cryptoService : CryptoService
){
}
async rtgsEntryPosting(data: rtgsDto , tag : string) {
let res = await this.cryptoService.decrypt(data['EncRequestData'],config.get('crypto').sibKey,config.get('crypto').sibIv);
let decryptedData = JSON.parse(res)
// console.log(decryptedData);
const connection = await this.createConnection(tag);
try {
let sql = `begin SIB_INWARD_INSERT(
'${data.clientCode}','${data.VAN}','${data.vCode}','${data.bankUTR}',null,to_date('${data.date}', 'DD-MM-YYYY'),null,null,null,null,
'${data.sendertoReceiverInformation}',null,'${data.remitterAccountnumber}','${data.remitterName}','${data.remitterIFSC}','${data.modeofTXN}','${data.amount}','${data.corpTXNID}','${data.corptxnStatus}','${data.statusCode}',
'${data.statusMessage}',null,null,null,null,null,null,null,null,null,
'${decryptedData.clientCode}','${decryptedData.VAN}','${decryptedData.vCode}','${decryptedData.bankUTR}',null,to_date('${decryptedData.date}', 'YYYY-MM-DD HH24:MI:SS'),null,null,null,null,
'${decryptedData.sendertoReceiverInformation}',null,'${decryptedData.remitterAccountnumber}','${decryptedData.remitterName}','${decryptedData.remitterIFSC}','${decryptedData.modeofTXN}','${decryptedData.amount}','${decryptedData.corpTXNID}','${decryptedData.corptxnStatus}','${decryptedData.statusCode}',
'${decryptedData.statusMessage}',null,null,null,null,null,null,null,null,null,
null,null,null, :OUT_IN_STATUS, :OUT_STATUS_CODE, :OUT_STATUS_MSG
);
end;`
console.log(sql);
// let res = await connection.execute(sql, [], { outFormat: oracledb.OBJECT });
let res = await connection.execute(
sql,
@ -28,17 +43,29 @@ export class RtgsService {
],
{ outFormat: oracledb.OBJECT }
);
console.log("payload===== ",data);
console.log('OUT_IN_STATUS:', res.outBinds[0]);
console.log('OUT_STATUS_CODE:', res.outBinds[1]);
console.log('OUT_STATUS_MSG:', res.outBinds[2]);
if(res){
return {
OUT_IN_STATUS: res.outBinds[0],
OUT_STATUS_CODE: res.outBinds[1],
OUT_STATUS_MSG: res.outBinds[2]
};
let result = {
clientCode: decryptedData.clientCode,
VAN: decryptedData.VAN,
vCode: decryptedData.vCode,
bankUTR: decryptedData.bankUTR,
amount: decryptedData.amount,
modeofTXN: decryptedData.modeofTXN,
date: decryptedData.date,
remitterName: decryptedData.remitterName,
remitterAccountnumber: decryptedData.remitterAccountnumber,
sendertoReceiverInformation: decryptedData.sendertoReceiverInformation,
remitterIFSC: decryptedData.remitterIFSC,
corptxnStatus: res.outBinds[0],
statusCode: res.outBinds[1],
statusMessage: res.outBinds[2]
};
let encrypt = await this.cryptoService.encrypt(result,config.get('crypto').sibKey,config.get('crypto').sibIv)
return {ClientCode : decryptedData.clientCode,EncResponseData : encrypt}
}
}catch(err){
@ -53,8 +80,8 @@ export class RtgsService {
}
async createConnection(VAN: string) {
return await connectOraDatabase(VAN);
async createConnection(tag: string) {
return await connectOraDatabase(tag);
}
async closeConnection(connection) {
@ -62,14 +89,18 @@ export class RtgsService {
}
async validatingRtgs(data: rtgsDto) {
const connection = await this.createConnection(data.VAN);
async validatingRtgs(data: rtgsDto, tag : string) {
let res = await this.cryptoService.decrypt(data['EncRequestData'],config.get('crypto').sibKey,config.get('crypto').sibIv);
let decryptedData = JSON.parse(res)
const connection = await this.createConnection(tag);
try {
let sql = `begin SIB_INWARD_validation_api(
'${data.clientCode}','${data.VAN}','${data.vCode}',null,null,null,null,null,null,null,
null,null,null,null,null,null,'${data.amount}',null,null,null,
'${data.statusMessage}',null,null,null,null,null,null,null,null,null,
'${decryptedData.clientCode}','${decryptedData.VAN}','${decryptedData.vCode}',null,null,null,null,null,null,null,
null,null,null,null,null,null,'${decryptedData.amount}',null,null,null,
'${decryptedData.statusMessage}',null,null,null,null,null,null,null,null,null,
null,null,null, :OUT_IN_STATUS, :OUT_STATUS_CODE, :OUT_STATUS_MSG
);
end;`
@ -83,21 +114,23 @@ export class RtgsService {
],
{ outFormat: oracledb.OBJECT }
);
console.log("payload===== ",data);
// console.log("payload===== ",data);
console.log('OUT_IN_STATUS:', res.outBinds[0]);
console.log('OUT_STATUS_CODE:', res.outBinds[1]);
console.log('OUT_STATUS_MSG:', res.outBinds[2]);
if(res){
return {
clientCode : data.clientCode,
VAN : data.VAN,
vCode : data.vCode,
amount : data.amount,
let result = {
clientCode : decryptedData.clientCode,
VAN : decryptedData.VAN,
vCode : decryptedData.vCode,
amount : decryptedData.amount,
corptxnStatus: res.outBinds[0],
statusCode: res.outBinds[1],
statusMessage: res.outBinds[2]
};
let encrypt = await this.cryptoService.encrypt(result,config.get('crypto').sibKey,config.get('crypto').sibIv)
return {ClientCode : decryptedData.clientCode,EncResponseData : encrypt}
}
}catch(err){

Loading…
Cancel
Save