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