const express = require('express')
const app = express()
const configPartnerList = require('./config_partner.json');
const PartnerManager = require('./req_partner_manager');
let moment = require('moment')
let unirest = require('unirest')
let request = require('request')
let cors = require('cors')
let toXML = require('jstoxml');
// var mongoose = require('mongoose');
// mongoose.connect('mongodb://10.1.2.146:27018/test');
// var MongoClient = require('mongodb').MongoClient;
// var dburl = "mongodb://10.1.2.144:27018/test";
// MongoClient.connect(dburl, function(err, db) {
// if (err) {
// throw err;
// }
// console.log('db connected');
// db.close();
// });
const port = 3002
app.use(cors())
app.use((req, res, next) => {
console.log('incomming url: ',req.originalUrl)
next()
})
app.use(express.urlencoded());
app.use(express.json());
app.post('/apiRequest', (req, res) => {
console.log(req.params.apiRequest)
console.log(req.originalUrl);
console.log(req.url)
let partnerCode = req.body.partnerCode
let configPartner = null;
if (Array.isArray(configPartnerList.partner)) {
for (let partner of configPartnerList.partner) {
if (partnerCode == partner.partnerCode) {
configPartner = partner;
break;
}
}
}
if (configPartner) {
let reqPartner = new PartnerManager(req.body, configPartner);
let apiRequest = reqPartner.requestApi()
if (apiRequest instanceof Error) {
//handle error
res.send(JSON.parse(apiRequest.message))
} else {
res.send(apiRequest)
}
} else {
res.send('unknown partner')
}
})
app.post('/ktc/point/transferPoint', (req, res) => {
console.log('/ktc/point/transferPoint', req.body)
console.log('/ktc/point/transferPoint', req.headers)
let response = {
aaa: "test",
pushRefId1: 'WsxK21',
resultData: [
{
pointId1: 'ser'
},
{
pointId1: 'ser1'
}
]
}
res.set('xx', 'test')
// res.status(200).json(response)
})
app.post('/mockOneSiamMoblieServiceSoap', (req, res) => {
console.log(req.body)
console.log(req.headers)
res.status(200).send('123$value$value$value')
})
app.get('/get', (req, res) => {
console.log('get', req.body)
console.log('get', req.headers)
let response = {
pushRefId: '',
resultData: [
{
pointId1: 'ser'
},
{
pointId1: 'ser1'
}
]
}
// res.status(200).json(response)
});
app.get('/test', async (req, res) => {
console.log('test', req.body)
console.log('test', req.headers)
try {
let response = await doRequestFormData('http://test.us-payment.picovr.com/AISPayNotify',{ accept: 'application/json'}, {
app_id: '24e09f8038dbf1204c09090d56c872c0',
body: 'PICO-COINS12000',
buyer_pay_fee: 'Paid by user',
device_id: '90c73518a762a2d1a339d7f',
fee_type: 'THB',
mch_id: 'company_id',
nonce_str: 'SpXrgaKf4fagyF9a',
notify_type: 'PAY',
open_id: 'ZLsdZaanhHDAUkDDgRX6QfpxAj0CSx6x7BLgUt4LlpM=',
out_trade_no: '202004081609523',
pay_time: 1587527937951,
pay_type: 'AIS',
receipt_fee: '0.00',
subject: 'Purchased 12000 coins.',
terminal_type: 'IOS',
timestamp: 1587527937951,
total_fee: '0.00',
trade_no: '50609152601900018023',
trade_type: 'Download',
signature: '83387eaf92018538d5f8fd7f3a6ecd0a'
})
res.send(response)
} catch (e) {
//if doRequestFormData has error
//reject, timeout, other error
console.log('doRequestFormData', e)
res.send('error')
}
});
function doRequestFormData(url, headers, data) {
console.log(url, headers, data)
return new Promise(function (resolve, reject) {
request.post({ url: url, headers: headers, timeout: 2000, formData: data }, function (error, res, body) {
if (!error && res.statusCode == 200) {
resolve(body);
} else {
reject(error);
}
});
});
}
// app.post('/api/v1/mpay/billingonbehalf/reserveAndChargeVolume.json', (req, res) => {
// console.log(req.body)
// console.log(req.headers)
// let response = {
// "reserveAndChargeVolumeResponse": {
// "result": "SUCCESS",
// "resultDescription": "60713000154960518477",
// "endUserIdentifier": "66873381009",
// "networkType": "prepaid"
// }
// }
// res.status(200).json(response)
// });
app.post('/api/v1/mpay/billingonbehalf/reserveAndChargeVolume.json', function (req, res) {
// res.send({
// // reserveAndChargeVolumeResponse : {
// result: "SUCCESS",
// resultDescription: "60713000154960518477",
// endUserIdentifier: "66873381009",
// networkType: "prepaid"
// // }
// })
})
// app.post('/api/v1/mpay/billingonbehalf/partialRefundVolume.json', (req, res) => {
// console.log(req.body)
// console.log(req.headers)
// let response = {
// "refundVolumeV2Response": {
// "result": "SUCCESS",
// "resultDescription": "60713000154960518477",
// "endUserIdentifier": "66873381009",
// "networkType": "prepaid"
// }
// }
// res.status(200).json(response)
// });
app.post('/api/v1/mpay/billingonbehalf/queryChargeTransaction.json', (req, res) => {
console.log(req.body)
console.log(req.headers)
let response = {
"result": "SUCCESS",
"resultDescription": "201805231904005310944"
}
res.status(200).json(response)
});
app.post('/api/v1/mpay/billingonbehalf/queryRefundTransaction.json', (req, res) => {
console.log(req.body)
console.log(req.headers)
let response = {
"result": "SUCCESS",
"resultDescription": "201805231904005310944"
}
res.status(200).json(response)
});
// app.use(multiparty({ uploadDir: "./img"}));
app.post('/api/shop-cdns/upload', (req, res) => {
var azure = require('azure-storage')
var multiparty = require('multiparty')
process.env.AZURE_STORAGE_ACCOUNT = 'shareallspw'
process.env.AZURE_STORAGE_ACCESS_KEY = 'TIWwkqyvlyTySRzSelOJij2jaZbKIZ/fLUST0q9TPZGNI1dQVVn1/bU4/FnEJnUpvW1fqtWYI2HmGJeD/Oo4eA=='
var blobService = azure.createBlobService();
var form = new multiparty.Form();
form.on('part', function (part) {
if (!part.filename) return;
var size = part.byteCount;
var path = 'point'
var name = moment().valueOf() + '.' + part.filename.split('.')[1];
var container = 'spw-cdn';
blobService.createBlockBlobFromStream(container, path + '/' + name, part, size, function (error, result, response) {
if (error) {
console.log(error)
// error handling
res.status(500).send('Error uploading file');
}
console.log('result', result)
console.log('response', response)
// res.send('File uploaded successfully');
let responseMessage = {
name: part.filename,
type: part.headers['content-type'],
size: part.byteCount,
container: '/' + path,
imageUrl: 'https://shareallspw.azureedge.net/' + path + '/' + name,
thumbnails: 'test1',
thumbnails43: 'test2',
}
console.log(responseMessage)
res.send(responseMessage)
});
});
form.parse(req);
});
var multipart = require('connect-multiparty');
const { sortedUniq, result, reject, flatMap } = require('lodash');
var multipartMiddleware = multipart({ uploadDir: './img' });
app.post('/api/shop-cdns/upload2', multipartMiddleware, async (req, res) => {
console.log(req.body, req.files);
var size = req.files.file.size;
var name = moment().valueOf() + '.' + req.files.file.name.split('.')[1];
var path = 'point'
var container = 'spw-cdn';
// console.log(req.files.file.path)
var blobService = azure.createBlobService();
blobService.createBlockBlobFromLocalFile(container, path + '/' + name, req.files.file.path, (error, result, response) => {
console.log(result)
console.log(response)
console.log(error)
console.log({
name: name,
type: req.files.file.type,
size: size,
container: '/' + path,
imageUrl: 'https://shareallspw.azureedge.net/' + path + '/' + name,
thumbnails: 'test1',
thumbnails43: 'test2',
})
res.send({
name: name,
type: req.files.file.type,
size: size,
container: '/' + path,
imageUrl: 'https://shareallspw.azureedge.net/' + path + '/' + name,
thumbnails: 'test1',
thumbnails43: 'test2',
})
})
});
app.get('/scf/v2/partnerSpecificPrivateId/:privateId.json', require('./scf').decryptPrivateId);
app.post('/api/v1/gsso/sendOneTimePW.json', require('./gsso').sendOneTimePassword);
app.post('/api/v1/gsso/confirmOneTimePassword.json', require('./gsso').confirmOneTimePassword);
app.get('/ssb/profile/network/subscriber/:userId/type/:userType', require('./ssb').getProfileType);
app.post('/ssb/profile/historyPackage', require('./ssb').queryHistoryPackage);
app.post('/ssb/profile/currentPackage', require('./ssb').queryCurrentPackage);
app.post('/ssb/package/apply', require('./ssb').applyPack);
app.post('/ssb/package/subscriber', require('./ssb').deletePackage); //
app.post('/ssb/transform', require('./ssb').createNewRegistration);
app.post('/v1.0/ais/users', require('./vcom').userRegisterAndRegisterDevice);
app.post('/verifyReceipt', require('./apple').verifyReceipt); //
app.post('/api/v1/package/packagepayment', require('./nafa').packagePayment); //
app.post('/api/v1/package/cancelPackage', require('./nafa').cancelPackage); //
app.get('/api/v1/customer', require('./d01').getCustomer);
app.post('/api/v1/customer', require('./d01').postCustomer);
app.put('/api/v1/customer', require('./d01').putCustomer);
app.delete('/api/v1/customer', require('./d01').deleteCustomer);
app.get('/api/v1/memberlink', require('./d01').getMemberLink);
app.post('/api/v1/memberlink', require('./d01').postMemberLink);
app.put('/api/v1/memberlink', require('./d01').putMemberLink);
app.delete('/api/v1/memberlink', require('./d01').deleteMemberLink);
app.get('/api/v1/address', require('./d01').getAddress);
app.post('/api/v1/address', require('./d01').postAddress);
app.put('/api/v1/address', require('./d01').putAddress);
app.delete('/api/v1/address', require('./d01').deleteAddress);
app.get('/api/v1/mastermember', require('./d01').getMasterMember);
app.post('/api/v1/mastermember', require('./d01').postMasterMember);
app.put('/api/v1/mastermember', require('./d01').putMasterMember);
app.delete('/api/v1/mastermember', require('./d01').deleteMasterMember);
app.get('/api/v1/gender', require('./d01').getGender);
app.post('/api/v1/gender', require('./d01').postGender);
app.put('/api/v1/gender', require('./d01').putGender);
app.delete('/api/v1/gender', require('./d01').deleteGender);
app.get('/api/v1/address_type', require('./d01').getAddressType);
app.post('/api/v1/address_type', require('./d01').postAddressType);
app.put('/api/v1/address_type', require('./d01').putAddressType);
app.delete('/api/v1/address_type', require('./d01').deleteAddressType);
app.post('/auth/v3.1/oauth/token', require('./admd').oauthToken);
app.post('/auth/v3.1/logout', require('./admd').logout);
app.post('/validate/token', require('./admd').validateToken);
app.post('/auth/v3.2/oauth/token', require('./admd').oauthToken);
app.post('/point/v1/deleteCustomer', require('./micro_point').deleteCustomer);
app.post('/privilege/v1/history/delete', require('./privilege').deleteCustomer);
app.post('/v1/MVP/enq/getMobileOfferInventory/', require('./true').getMobileOfferInventory);
app.post('/v1/get_AccountStatusHistoryList/', require('./true').getAccountStatusHistoryList);
app.post('/MGContractInfo/MGContractInfo/getContractHistoryList', require('./true').getContractHistoryList);
app.post('/v1/get_ProductInfo/', require('./true').getProductInfo);
app.post('/broadband/mb_service/crm_api.php', require('./true').getProfile);
app.post('/api/v1/LG-API/notifySubscription', require('./lg').notifySubscription);
app.post('/goapi/profile/assetDetail', require('./ccbs').assetDetail);
app.post('/goapi/profile/churnscore/offerlist', require('./ccbs').churnScoreOfferList);
app.get('/goapi/profile/external/customer/usageInfo/:type/:number', require('./ccbs').usageInfo);
app.post('/v1/OSBCOM/BillingProfileInfo/UsageProfileInfoREST/getAccumulationUOMGroupList/', require('./ccbs').accumulationUOMGroupList);
app.post('/CCBSCommonInfo/MGCommonInfo/getPrimaryKeyListWithoutResourceType', require('./ccbs').getPrimaryKeyListWithoutResourceType);
app.post('/v1/get_bundle_profile_list/', require('./ccbs').getBundleProfileList);
app.post('/v1/CCCSOA/OrganizationInfoWS/OrganizationInfoSI/getAgreementBundleUsageInfo', require('./cccsoa').getAgreementBundleUsageInfo);
app.post('/CRMIAsset/getAssetComponentList', require('./crmasset').getAssetComponentList);
app.post('/MGOfferInfo/MGOfferInfo/getAllDiscountList', require('./int').getAllDiscountList);
app.post('/MGOfferInfo/MGOfferInfo/getFuturePromotionList', require('./int').getFuturePromotionList);
app.post('/MGOfferInfo/NativeOfferInfo/getCurrentCUGList', require('./int').getCurrentCUGList);
app.post('/MGOfferInfo/NativeOfferInfo/getCurrentFriendFamilyList', require('./int').getCurrentFriendFamilyList);
app.post('/MGOfferInfo/NativeOfferInfo/getCurrentSpendingLimitList', require('./int').getCurrentSpendingLimitList);
app.post('/MGOfferInfo/NativeOfferInfo/getCurrentCreditLimitAtSubList', require('./int').getCurrentCreditLimitAtSubList);
app.post('/MGOfferInfo/NativeOfferInfo/getCurrentSplitChargeInfo', require('./int').getCurrentSplitChargeInfo);
app.post('/v1/get_BillImage/', require('./int').getBillImage);
app.post('/v1/OSB/get_AdjustmentSummaryAmount/', require('./int').getAdjustmentSummaryAmount);
app.post('/v1/OSB/get_AdjustmentHistoryList/', require('./int').getAdjustmentHistoryList);
app.post('/GatheringBillingInfo/GatheringBillingInfo/getTDSList', require('./int').getTdsList);
app.post('/v1/get_FinalChargeInfo/', require('./int').getFinalChargeInfo); //postpay
app.get('/v1/get_PayChannelInfo/:ban', require('./int').getPayChannel);
app.get('/MGCCBSInvoiceInfo/MGCCBSInvoiceInfo/getAllCCBSInvoiceList/:ban/:pageSize/:pageNo', require('./intx').getAllCCBSInvoiceList);
app.get('/FinancialTransaction/MGPaymentInfo/getPaymentList/:ban/:pageSize/:pageNo', require('./intx').getPaymentList);
app.post('/MGContractInfo/MGContractInfo/getCurrentContractList', require('./intx').getCurrentContractList);
app.post('/MGCustomerInfo/MGCustomerInfo/getAccountInfo', require('./intx').getAccountInfo);
app.get('/v1/get_BillingAddress/:accountId/:pageNo', require('./postpay_true').getBillingAddress); //postpay
app.post('/v1/get_AccountCustomerInfo/', require('./postpay_true').getAccountCustomerInfo); //postpay
app.get('/v1/get_LastInvoiceList/:accountId/:pageSize', require('./postpay_true').getLastInvoiceList); //postpay
app.post('/v1/OSB/get_LastDocumentList/', require('./postpay_true').getLastDocumentList); //postpay
app.post('/v1/get_CreditLimitInfo/', require('./postpay_true').getCreditLimitInfo); //postpay
app.get('/MGBillingInfo/MGBillingInfo/getBillMediaInfo/:accountId/', require('./postpay_true').getBillMediaInfo); //postpay
app.post('/MGProductInfo/MGProductHistoryInfo/getProductHistoryList', require('./postpay_true').getProductHistoryList); //postpay
app.get('/v1/get_PaymentList/:accountId/:pageSize/:pageNumber/', require('./postpay_true').getPaymentList); //postpay
app.get('/v1/get_BillingAddress/:ban', require('./postpay_true').getBillingAddress); //postpay
app.post('/MCS/enquiry/subscriptioninfo/', require('./postpay_true').getDCBStatus); //postpay
app.post('/AggregateBillingInfo/MGBalanceInfo/getBalanceList', require('./postpay_true').getBalanceList); //postpay
app.post('/APIConnector/services/EnterpriseIntegration', express.text({type:"*/*"}), require('./postpay_true').sumCollectionAmount); //postpay
app.post('/SBMWSREALCCP3G15/DoServiceFromXML', express.text({type:"*/*"}), require('./sbm').getCheckBalance_SBMWSREALCCP);
app.post('/SBMWSREAL3G15/DoServiceFromXML', express.text({type:"*/*"}), require('./sbm').getCheckBalance_SBMWSREAL);
app.post('/SBMWSDataIRPos/DoServiceFromXML', express.text({type:"*/*"}), require('./sbm').getCheckBalanceIR);
app.post('/CCPGW_ServiceWeb/Services/QueryUserProfile', express.text({type:"*/*"}), require('./ccp').userProfile);
app.post('/CCPGW_ServiceWeb/Services/QryBalanceList', express.text({type:"*/*"}), require('./ccp').balance);
app.post('/CCPGW_ServiceWeb/Services/QueryCDR', express.text({type:"*/*"}), require('./ccp').queryCDR);
app.get('/api/callback', require('./line').callback);
app.get('/v1/product/loyaltyProgramProdSpec/pointDetail.json', require('./point').getPointDetail);
app.post('/sendSMS', require('./sms').sendSMS);
app.post('/api/v1/cst/wallets/checkWallet', require('./bot_gateway').checkWallet);
app.get('/api/v2/Account/:accountId/Destinations', require('./magellan').getAccountDestination);
app.get('/api/v2/Account/:accountId/Things', require('./magellan').getAccountThings);
app.get('/api/v1/pam-js/apiList/partner/:username', require('./pam').getApiForPartner);
app.post('/api/authen/application', require('./cmsp-authen').authen);
app.post('/graphql', require('./cirr').graphql);
app.get('/sgl/api/v1/accounting-management/accountpayables', require('./account-api').accountPayables);
app.get('/sgl/api/v1/company-management/companies', require('./company-api').getCompanies);
app.get('/sgl/api/v1/company-management/contactpersons', require('./company-api').contactPersons);
app.get('/api/random/leader', function (req, res) {
const months = ["เกมส์", "โน๊ต setup", "โน๊ต วัศรุต", "แบงค์", "มอส", "ปิ๊ค", "เต้นพอไม่ต้องตื่น", "เปา", "นัท", "kik", "new", "ann","na", "boky", "eve", "miki", "pla", "sugar"];
// const months = [ "ann"];
let object={}
for(var i=0; i<100; i++) {
const random = Math.floor(Math.random() * months.length);
// console.log(random, months[random]);
if(object[months[random]]) {
object[months[random]] = object[months[random]] + 1;
} else {
object[months[random]] = 1
}
}
console.log(object);
res.send(object);
})
app.get('/api/parallel/request', async function (req, res) {
let dataList = ['001','002','003','004','005','006','007','008','009','010','011','012','013','014','015','016','017','018','019','020']
let response = await completelyReq(dataList)
console.log('response to client', response)
res.send(response)
})
var parallelLimit = require('run-parallel-limit')
async function completelyReq(dataList) {
let limit = 10
let length = dataList.length > limit ? limit : dataList.length;
let tempList = []
for(let i=0; i {
reqFunc(dataList[i], )
});
// dataList.shift();
}
return new Promise( resolve => {
parallelLimit(tempList, 10, function (err, results) {
if(err) {console.log(err); reject(err)};
console.log(results)
resolve(results)
})
})
// return await Promise.all(tempList);
}
function reqFunc(arg, cb) {
// console.log(tempList)
console.log('send req ', arg, new Date())
unirest
.post('http://mockbin.com/request')
.headers({'Accept': 'application/json', 'Content-Type': 'application/json'})
.send({ "parameter": 23, "foo": "bar", "seq": arg })
.then((response) => {
// console.log(response.body.postData.text)
// let delay = Math.floor(Math.random()*10000)
console.log('recieve response ' , response.body.postData.text, new Date())
cb(null, response.body.postData.text)
// setTimeout(function () {
// cb(null, response.body.postData.text)
// }, 100)
})
}
// function check(data, dataList, tempList) {
// return new Promise(async (resolve, reject) => {
// // console.log('tempList.length', tempList.length)
// if(tempList.length == 20) {
// // let allResponse = await Promise.all(tempList);
// // console.log(allResponse)
// resolve(tempList)
// } else {
// console.log(tempList)
// tempList.push(reqFunc(dataList[0], dataList, tempList))
// dataList.shift();
// }
// })
// }
app.get('/linenoti', require('./line').lineNoti)
var queue = require('queue')
var q = queue({ results: [] })
app.get('/q1/:timeout', (req, res, next) => {
q.push(function(cb) {
setTimeout(function () {
console.log('super slow job finished at', new Date())
cb(null, 'one ' + req.params.timeout)
}, req.params.timeout)
})
q.push(function(cb) {
setTimeout(function () {
console.log('second slow job finished at', new Date())
cb(null, 'one ' + req.params.timeout)
}, req.params.timeout)
})
q.start(function (err) {
if (err) throw err
console.log('all done:', q.results)
})
res.send('ok1')
})
app.get('/q2', (req, res, next) => {
q.push(function(cb) {
setTimeout(function () {
console.log('slow job finished at', new Date())
cb(null, 'two')
}, 5000)
})
res.send('ok2')
})
app.get('/q3', (req, res, next) => {
q.push(function(cb) {
setTimeout(function () {
console.log('fastest job finished at', new Date())
cb(null, 'three')
}, 1000)
})
res.send('ok3')
})
q.on('success', function (result, job) {
console.log('job finished processing:', job)
console.log('The result is:', result)
})
// const snooze = ms => new Promise(resolve => setTimeout(resolve, ms));
// async function whileLoop() {
// let i = 0
// while(i < 10) {
// i = 0
// while (true) {
// if (i < 10) {
// // throw 'data exit'
// i++
// await snooze(100)
// console.log('continue', i)
// continue;
// } else {
// await snooze(100)
// console.log('while break', i)
// break;
// }
// }
// }
// }
// whileLoop()
app.listen(port, () => console.log('app listening on port ' + port + '!'))
decryptAes256 = function (text) {
const crypto = require('crypto');
try {
const pwd = "l;ylfu;yo/o9drkp6g-hk#ohemj;,0hk"
const iv = Buffer.alloc(16, 0);
var mykey = crypto.createDecipheriv('aes-256-cbc', pwd, iv);
var mystr = mykey.update(text, 'hex', 'utf8')
mystr += mykey.final('utf8');
return mystr.toString()
} catch (e) {
return text
}
}
console.log('decryptAes256', decryptAes256('54848fc27a3ecd9340da85bc201769d180721cedb4e472781920b05d09d9daf6'))
//test
const NodeRSA = require('node-rsa');
const jwt = require('jsonwebtoken')
const crypto = require('crypto');
test = () => {
// let key = new NodeRSA()
// // key.importKey( Buffer.from(result.encryptPublicKey, 'base64') , 'pkcs8-public-der');;
// key.importKey( Buffer.from(`MIIEpAIBAAKCAQEAtENoPR+2r0O/AaPcLwHPv67du7ZHE4XIPDT59oo5pL/vdQrmfapjYDsHdt9GW1ch8xfOWX4TERkBnTqudbNkN0uGzKzGCnJ6DUDfhURelTXpfl2wPLnf4G1EHxtN4AG9Juy+NTT3QDTRriHHUaw07Ra/ExbXB2uV1yDIg+zVTuZRmFDvkIsWMCconrSp1no0C6oz1i2sF+QFQ8atObtYPOf008NusZGfwk9d/RS3G6EQD5K9dgIzvkZB27lgQ+cCg7pifF6pNLvUkTEkbF6v3Uo5lD4gs7d0LfJ94DP2PbOqXDSBO1WtZWh950QtBS71CRnhJpGXt6XBgJMB4QlfZwIDAQABAoIBAQCugO6g9VlxU2DNoqXdL6DAi/SE6hDmWkUb26D7RJZG4bNal6HHlzG6j4pLThubAr+Px8Tvp3envpBsd8k5kd77FHc7HipdJLL4r4tyRFxXj6got2OLddi/NqeSgWki6CwHSXlcopiUJE2zh2mfq9hUiAeS4DJrMYANkOPrqlJYnEfOAlAHt0a2Q0GJ+6xpQqZ/EyklSpxBsPoFI2Wjll0hFzL472hg3NBqIU37O25JBLkQjhX5aM+t5M0sYvOZ00aDqBoCWV09KIX+zw8fLK1MvqxfGyUoRCaHUnjVq2cwdswOIzHQ6csRMcTh3/7PnKVr5XV9CdP3Lr6kilf5Rx/BAoGBAN4G8iTaNBs0n/0hj9rg3B8+03OOlhGWZk+8RPHhzdAPhNllhq4tgoWkyKcts6w4Rh545btr7U/p01NNqn0dXfcKvOHheWhEKhbivOAVDcyKc45afXRlTon2YyC+kIUVKrg6e+jD2q5Gp88lxAPNMdx6epo7s5CYSiDMrvJl9sNHAoGBAM/YhmurQhKeOmcN5hS4BWvueyUbfD07nCSjzrHL45pH8ejj5VJkcWyzy4+TD3qFmWgxEih9947uo5Mu1TizMSV+0IELBqJCuKKEBUkMkwSCv2PI42b7Nmd1Bd7cIOgR3JZzN6Q2Z1Vg/3PfcRMxTPV3Lbosr9Z6pkxeGatCDVLhAoGATsRED1Lh/WzT/Wd0s3/mV6dgOLSzBJZIwazXAMDM1S1MQhvEhfJbRbJKBRUvkr98EL9vMOh/DkSz1e/Ntgk/Fq9WhwQIoDbef7P8sbqGZLQRfsUXkL2H+WXRkQJKHwx9VVJaNx+UaxNh4RlSys53C/Lfn+viLj/4vF4hCpmly20CgYAJR5OIzxaeGi5lV3uERUsIrJcW6wk6+qRYBnA+A+pfgwLL8RDWAuIFhml6OYihYcGdo0M6R5V77i+jbJ3ccDOrhuPsPv/G0s/Hgblyr3sI4oWFAP0WJfUh3Vmrv4xAkDuXBAHh9QPcDf6Zv8oenz7eXrnN7BzVqJgwJKtkuAg8QQKBgQDQWOIB6rGZvzNFcmR6NOCCXo/n6LLO8yFbE/bnC8VhV9a+lvBvbF/5ydAQ59pF6HucG9CvCehaTURpLk8AIzPbX0YAp8vUz0uxQEqxZTliix5OQDOgGziKx2j5dEKiL3QyeVpcWgtR6H7j3FAveVfFsEZ4Z41klRFtDtlfoxRpcg==`, 'base64'), 'pkcs1-private-der' );
// // console.log(key.isPrivate())
// // const text = JSON.stringify(contentRSA);
// // const encrypted = key.encrypt(text, 'base64');
// // console.log('encrypted:', encrypted);
// let encrypted = "fWPDV0Pe7aXrobnTQykCStZ1wAdLEe3jd37sNcSai9O950qza4yE1e03eiWseFYNT480oKvvV774kZOIsM05ESVhsDEKscA/EMomuFyA15By7zENXSPx3TDaTyKMJ4ebGm1riXtODz9jlEWp8RPGIAi3Md9zItH7xsg0nKBqqffbblBFbZtVYjOFVRIG1notBSzqKiMk1M97TwuuPFEKj4rbGMZeQEl5LASr157+zqA3WtQewnHHf1v+BzHgMGmBUjzNDICvfHpAerZK5Krgn8STtvajHYcqX6qIRhCaKSDHpCncol3jCGuL5I47k/OiIg6uvdM7qZDWC/jhptvLfQ=="
// const decrypted = key.decrypt(encrypted, 'utf8');
// console.log('decrypted:', decrypted);
rsaPrivateKey = `-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtENoPR+2r0O/AaPcLwHPv67du7ZHE4XIPDT59oo5pL/vdQrm
fapjYDsHdt9GW1ch8xfOWX4TERkBnTqudbNkN0uGzKzGCnJ6DUDfhURelTXpfl2w
PLnf4G1EHxtN4AG9Juy+NTT3QDTRriHHUaw07Ra/ExbXB2uV1yDIg+zVTuZRmFDv
kIsWMCconrSp1no0C6oz1i2sF+QFQ8atObtYPOf008NusZGfwk9d/RS3G6EQD5K9
dgIzvkZB27lgQ+cCg7pifF6pNLvUkTEkbF6v3Uo5lD4gs7d0LfJ94DP2PbOqXDSB
O1WtZWh950QtBS71CRnhJpGXt6XBgJMB4QlfZwIDAQABAoIBAQCugO6g9VlxU2DN
oqXdL6DAi/SE6hDmWkUb26D7RJZG4bNal6HHlzG6j4pLThubAr+Px8Tvp3envpBs
d8k5kd77FHc7HipdJLL4r4tyRFxXj6got2OLddi/NqeSgWki6CwHSXlcopiUJE2z
h2mfq9hUiAeS4DJrMYANkOPrqlJYnEfOAlAHt0a2Q0GJ+6xpQqZ/EyklSpxBsPoF
I2Wjll0hFzL472hg3NBqIU37O25JBLkQjhX5aM+t5M0sYvOZ00aDqBoCWV09KIX+
zw8fLK1MvqxfGyUoRCaHUnjVq2cwdswOIzHQ6csRMcTh3/7PnKVr5XV9CdP3Lr6k
ilf5Rx/BAoGBAN4G8iTaNBs0n/0hj9rg3B8+03OOlhGWZk+8RPHhzdAPhNllhq4t
goWkyKcts6w4Rh545btr7U/p01NNqn0dXfcKvOHheWhEKhbivOAVDcyKc45afXRl
Ton2YyC+kIUVKrg6e+jD2q5Gp88lxAPNMdx6epo7s5CYSiDMrvJl9sNHAoGBAM/Y
hmurQhKeOmcN5hS4BWvueyUbfD07nCSjzrHL45pH8ejj5VJkcWyzy4+TD3qFmWgx
Eih9947uo5Mu1TizMSV+0IELBqJCuKKEBUkMkwSCv2PI42b7Nmd1Bd7cIOgR3JZz
N6Q2Z1Vg/3PfcRMxTPV3Lbosr9Z6pkxeGatCDVLhAoGATsRED1Lh/WzT/Wd0s3/m
V6dgOLSzBJZIwazXAMDM1S1MQhvEhfJbRbJKBRUvkr98EL9vMOh/DkSz1e/Ntgk/
Fq9WhwQIoDbef7P8sbqGZLQRfsUXkL2H+WXRkQJKHwx9VVJaNx+UaxNh4RlSys53
C/Lfn+viLj/4vF4hCpmly20CgYAJR5OIzxaeGi5lV3uERUsIrJcW6wk6+qRYBnA+
A+pfgwLL8RDWAuIFhml6OYihYcGdo0M6R5V77i+jbJ3ccDOrhuPsPv/G0s/Hgbly
r3sI4oWFAP0WJfUh3Vmrv4xAkDuXBAHh9QPcDf6Zv8oenz7eXrnN7BzVqJgwJKtk
uAg8QQKBgQDQWOIB6rGZvzNFcmR6NOCCXo/n6LLO8yFbE/bnC8VhV9a+lvBvbF/5
ydAQ59pF6HucG9CvCehaTURpLk8AIzPbX0YAp8vUz0uxQEqxZTliix5OQDOgGziK
x2j5dEKiL3QyeVpcWgtR6H7j3FAveVfFsEZ4Z41klRFtDtlfoxRpcg==
-----END RSA PRIVATE KEY-----`
let token = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkaWdpdGFsLmFpcy50aC9hdXRoIiwic3ViIjoiaWRUb2tlbiIsImp0aSI6Ik45TmdVTmpJUUpyIiwiaW5mbyI6IkhhZ3V1SmdtVG5wbDVKZ2dIeUZ3cnlyMGRkbVlBNEtadlN6VlIwczZlMlM4NXRUMmVnMEM2RWhRSGNnTXdaSGRJdys5NFdOcUs2M1lVQVJXM2E4OEY1YVdyVnRzQWNTMC94dnQvOHl0VmcwR3BrM0Rqb2xMcWxCNFVCTXcwYjhsTjFtb0dzVTMwN2xXYXlzMVZUWDVaZHVxdk5kWEpaWHpLekRPSFhzSUhRbERGY1U5SmlkMW1lb2RJQnllL2tCVHRaMTVMWnlNRWpscm9adndlVVJSMXg4aEJiQ2RxZDJYQ05iWUNCOU1yaHcvQmR0RmszMUF5MzUxa3lJSkNUZkdmaVlNTWNMcHdPTlZQUEgzRHNrclU3UFh1TDR4eGVWSEVGQWRhTlJWQ3E4T25NU0s4cTY1S2VqKy9ncUNRRFJYa0FLRlplbzFKNCthcGtXUzNBMXBDQT09IiwiaWF0IjoxNjYwMTkyODIxLCJleHAiOjE2NjAxOTM0MjF9.MiQ92QxQ8t8atL9Kw12QEaT6f3HGY5uXHWNJrmti3zZR8QC9DO6XGEbEpR03cgT4Ialb2jZD2WzOums2CN08nbwiSvvEWaRL8Vl8j4w3f1vePw25w64E7rc426PY-nYlk-U-AoErYxzSw8iLo6pyVDUg7psZHZh73-OshSC4xySV2oJAdEwsFv5VlGdNrBJZitP7OVdF7Qu7UUQqQPFR76bkMcOEmyDsBGzXUT3A0AlK2ilCwV1a_VCnfmdaQiMbXZ4v2iyRB0LsTha7OBi51AredQ5HYIwcLF0Mu7r1CFMRd0zqDTycO3Aaag5Pb82zJwfsr2JyRcDSiGB8nKKCrQ'
jwtPublicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA84UZfRnq6v9WTTA2zKLT
pKW8Zh7p0wipwTT59e7aT2znqGFD9xB5zx8BPIRGZ86aookOtI4CYGNS8TK8PMqB
RcdBRt4xMO+bzHeHE0ichFg46eCU7Bj5NIGDb8n2rWPRTk/jmkAYPIhMuWy2Jcw+
u3Mu7lhvlnDAzQvaL45Reg4CqbRtjuNFFcLmTkWNzJidrOmrS9lFuy6wKrLvHNmP
eQHFKVUU9qcmtODdmjsTJKekVnXO13fTE+PWQnWB0NbPpSyH8k3YlkoTDBFeZoY+
HH8M+vaXXg6OLNS8Ry8exz8iV5ofiwthNp3Ya/YzXMzrxSrewDNr4VBj3Ckv9IYW
FQIDAQAB
-----END PUBLIC KEY-----`
let jwtDecoded = jwt.verify(token, jwtPublicKey)
console.log('jwt decode:', jwtDecoded)
const crypto = require('crypto');
const decryptedData = crypto.privateDecrypt(
{
key: rsaPrivateKey,
padding: crypto.constants.RSA_PKCS1_PADDING,
},
Buffer.from(jwtDecoded.info, 'base64')
);
// The decrypted data is of the Buffer type, which we can convert to a
// string to reveal the original data
console.log("decrypted info data:", decryptedData.toString());
}
// test()
test1 = (text) => {
try {
const iv = Buffer.alloc(16, 0);
var mykey = crypto.createDecipheriv('aes-256-cbc', 'mypasswordmypasswordmypassword12', iv);
var mystr = mykey.update(text, 'hex', 'utf8')
mystr += mykey.final('utf8');
return mystr.toString()
} catch (e) {
console.log(e)
return text
}
}
// console.log(test1('5B346775BE1213611D4E77D63795296E'))
const fs = require('fs');
const { time } = require('console');
test2 = () => {
var jwtPrivate = fs.readFileSync('./jwt.pem'); // get private key
const token = jwt.sign({
"username": "dev@mail.com",
"ssid": "747GSS5FMkJqcU45KUiMws",
"refresh_token_expires_in": 86400
}, Buffer.from(jwtPrivate) , { algorithm: 'RS256' });
return token
}
// console.log(test2())
test3 = (seq) => {
let most = 0;
for(i in seq){
if((+i + 1) <= seq.length) {
let v = shum(seq[i], seq.slice((+i + 1)), seq[i])
if(v > most) {
most = v
}
}
}
console.log('result', most)
}
shum = (value, array, shummary) => {
for(a in array) {
if(value === array[a]) {
return shummary + array[a]
} else {
return shum(value, array.slice(1), array[a] + shummary)
}
}
return 0
}
let arr = [1,2,1,4,5,6,1,8,9,2]
// console.time('test3')
// test3(arr)
// console.timeEnd('test3')
test4 = (seq) => {
let most = 0
for(s in seq) {
let i = seq.indexOf(seq[s], +s + 1)
if(i !== -1) {
let sum = seq[s]
for(let j = s; j < i; j++) {
sum += seq[j]
}
if(sum > most) {
most = sum
}
}
}
console.log('result', most)
}
// console.time('test4')
// test4(arr)
// console.timeEnd('test4')
test5 = (home) => {
console.log('input >>', home)
for(let ih in home) {
let thisHomeHasTank = false
let thisHomeHasLand = false
if(home.charAt(ih) == 'H') {
thisHomeHasTank = hasTank(home, ih)
if(thisHomeHasTank) {
continue
} else {
thisHomeHasLand = hasLand(home, ih)
}
if(thisHomeHasLand) {
home = addTank(home, ih)
} else {
return -1
}
}
}
console.log('result >>', home)
let tankCount = 0
for(let t of home) {
if(t == 'T') {
tankCount += 1
}
}
return tankCount
}
hasTank = (home, i) => {
if(home.charAt(+i-1)) {
return home.charAt(+i-1) == 'T'
}
if(home.charAt(+i+1)) {
return home.charAt(+i+1) == 'T'
}
}
hasLand = (home, i) => {
let hasLand = false
if(home.charAt(+i-1)) {
hasLand = home.charAt(+i-1) == '_'
}
if(home.charAt(+i+1) && !hasLand) {
hasLand = home.charAt(+i+1) == '_'
}
return hasLand
}
addTank = (home, i) => {
if(home.charAt(+i+1)) {
if( home.charAt(+i+1) == '_' ){
home = replaceChar(home, +i+1, 'T')
return home
}
}
if(home.charAt(+i-1)) {
if( home.charAt(+i-1) == '_' ){
home = replaceChar(home, +i-1, 'T')
return home
}
}
}
replaceChar = (str, index, replacement) => {
return str.substring(0, index) + replacement + str.substring(index + 1);
}
// console.time('test5')
// console.log('number of tanks:', test5('_H_H_H_H_'), '\n')
// console.timeEnd('test5')
// console.log('number of tanks:', test5('H_HHH_'), '\n')
// console.log('number of tanks:', test5('H_H_H_H_'), '\n')
// console.log('number of tanks:', test5('_HH___HH_'), '\n')
// console.log('number of tanks:', test5('_H_'), '\n')
// console.log('\n')
let current = [150,160,170]
let future = [200,150,160]
test6 = (saving) => {
let profit = 0
for(let i in current) {
if(saving > current[i]) {
saving -= current[i]
}
}
return profit
}
// console.log(test6(310))
// console.log(new URLSearchParams({
// client_id: '123clientId',
// client_secret: '123clientSecret',
// grant_type: '123authorization_code',
// code: 'body.code',
// redirect_uri: '123redirectUrl',
// }).toString())
test7 = (amount) => {
let tb = Math.floor(amount / 1000)
amount = amount % 1000
let fhb = Math.floor(amount / 500)
amount = amount % 500
let hb = Math.floor(amount / 100)
amount = amount % 100
let twb = Math.floor(amount / 20)
amount = amount % 20
let teb = Math.floor(amount / 10)
amount = amount % 10
let fb = Math.floor(amount / 5)
amount = amount % 5
let ob = Math.floor(amount)
console.log(tb, fhb, hb, twb, teb, fb, ob)
}
// test7(15776)
var jsonToGraphql = function (json) {
const serviceEnv = {}
const configField = serviceEnv['fieldGraphql'] || {}
let data = {};
try {
data = JSON.parse(json)
} catch (e) {
console.log('condition is not json format ', e)
}
let args = {}
for(key in data) {
if(typeof data[key] === 'object'){
for(key2 in data[key]) {
args[key2] = data[key][key2]
}
}
}
// console.log(args)
let query = {
query: { apiList: Object.assign( { __args: data } , configField )}
}
console.log(JSON.stringify(query))
// const graphql_query = jsonToGraphQLQuery(query);
// return graphql_query
}
// jsonToGraphql(`{
// "resourceName": "Resource Name",
// "systemName": "System Name",
// "status": "Approved",
// "category": "Category",
// "customParams": [
// {
// "customKey": "Custom Parameter key",
// "customValue": "Custom Parameter value"
// },
// {
// "customKey": "Custom Parameter key2",
// "customValue": "Custom Parameter value2"
// }
// ]
// }`)
// urlChecker = function (url, checkUrl) {
// // console.log(url, '--', checkUrl)
// // console.log(url.split('/').slice(3, 5))
// let newUrl = url.split('/').slice(3, 5).map((value) => {
// return value.split('.')[0]
// }).join('/')
// console.log(url, newUrl, checkUrl)
// if(newUrl === checkUrl) {
// return true
// }
// return false
// }
urlChecker = function (url, checkUrl) {
let newUrl = url.split('/').slice(3, 5).map((value) => {
return value.split('.')[0]
}).join('/')
if(newUrl === checkUrl) {
return true
}
return false
}
// console.log(urlChecker('/api/v1/tq/tqTest', 'tq/tq'))
// console.log(urlChecker('/admd/v3/admd/test', 'admd/test'))
// console.log(urlChecker('/admd/v3/admd/test.json', 'admd/test'))
// console.log(urlChecker('/admd/v3/xx/admd/test', 'admd/test'))
// console.log(urlChecker('/api/v3/admd/test2', 'admd/test2'))
// console.log(urlChecker('/api/v3/admd/test2', 'admd/test'))
// console.log(urlChecker('/api/v3/admd/test2.json', 'admd/test'))
// console.log(urlChecker('/api/v3/admd/test/xxx.json', 'admd/test'))
let errorMessage = {
"success": {
"resultCode": "20000",
"developerMessage": "Success"
},
"successWithCondition": {
"resultCode": "20001",
"developerMessage": "Some information is missing"
},
"successWithCondition2": {
"resultCode": "20002",
"developerMessage": "Some information has not been updated"
},
"urlNotFound": {
"resultCode": "40400",
"developerMessage": "Unknown URL"
},
"accessDenied": {
"resultCode": "40100",
"developerMessage": "Access denied"
},
"unauthorizedUser": {
"resultCode": "40102",
"developerMessage": "Unauthorized User"
},
"jwtExpired": {
"resultCode": "40103",
"developerMessage": "Token Expired"
},
"missing": {
"resultCode": "40300",
"developerMessage": "Missing or Invalid parameter {param}"
},
"dataExisted": {
"resultCode": "40301",
"developerMessage": "Data existed"
},
"dataNotFound": {
"resultCode": "40401",
"developerMessage": "Data not found"
},
"systemHasAProblem": {
"resultCode": "41700",
"developerMessage": "The system has a problem"
},
"systemError": {
"resultCode": "50000",
"developerMessage": "System Error"
},
"dbUnknownError": {
"resultCode": "50001",
"developerMessage": "DB Error"
},
"dbConnectionTimeout": {
"resultCode": "50002",
"developerMessage": "Connection timeout"
},
"dbConnectionError": {
"resultCode": "50003",
"developerMessage": "Connection error"
},
"timeout": {
"resultCode": "50002",
"developerMessage": "Connection timeout"
},
"connectionError": {
"resultCode": "50003",
"developerMessage": "Connection error"
},
"destNodeError": {
"resultCode": "50010",
"developerMessage": "{destnode} error: {code}:{message}"
},
"connectionNodeTimeout": {
"resultCode": "50011",
"developerMessage": "{destnode} timeout"
},
"connectionNodeError": {
"resultCode": "50012",
"developerMessage": "{destnode} connection error"
},
"admdError": {
"resultCode": "50004",
"developerMessage": "ADMD Error"
}
}
mappingDeveloperMessage = function (resultCode) {
let e;
for(key in errorMessage) {
if(errorMessage[key].resultCode == resultCode) {
e = errorMessage[key]
}
}
return e
}
// console.log(mappingDeveloperMessage('40403'))
let stateStatus = 'supplier-registration|waiting,supplier-registration|reject,supplier-registration|approve,business-agreement|waiting,business-agreement|reject'
function createAQuery(query) {
let q = {}
let stateStatusList = query.stateStatus.split(',')
let groupState = {}
for (stateStatus of stateStatusList) {
if(stateStatus.includes('|')) {
// console.log(stateStatus)
let ss = stateStatus.split('|')
let state = ss[0]
let status = ss[1]
if(groupState[state]) {
groupState[state].push(status)
} else {
groupState[state] = [status]
}
}
}
// console.log(groupState)
q.$or = []
for(g in groupState) {
q.$or.push({
state: g,
status: { $in: groupState[g]}
})
}
return q;
}
console.log(JSON.stringify(createAQuery({stateStatus})))