Created
October 22, 2021 12:16
-
-
Save henno/819b1b3849e4471e6f7a9ded73a058ef to your computer and use it in GitHub Desktop.
Create and verify signatures for barBank
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Index: crypto.js | |
| IDEA additional info: | |
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
| <+>UTF-8 | |
| =================================================================== | |
| diff --git a/crypto.js b/crypto.js | |
| new file mode 100644 | |
| --- /dev/null (date 1634904787281) | |
| +++ b/crypto.js (date 1634904787281) | |
| @@ -0,0 +1,58 @@ | |
| +const {JWS, JWK} = require("node-jose"); | |
| +const fs = require("fs"); | |
| +const {join} = require("path"); | |
| +const jwt = require("jsonwebtoken"); | |
| +const jwkToPem = require("jwk-to-pem"); | |
| +const {sendGetRequest} = require("./middlewares"); | |
| + | |
| +exports.getToken = async function (dataToBeSigned, key) { | |
| + return await JWS.createSign({ | |
| + compact: true, | |
| + jwk: key, | |
| + fields: {typ: 'jwt'} | |
| + }, key).update(JSON.stringify(dataToBeSigned)).final(); | |
| +} | |
| +exports.getKeystore = async function () { | |
| + const keystore = JWK.createKeyStore(); | |
| + if (!fs.existsSync(keystoreFile)) { | |
| + if (!fs.existsSync(certDir)) { | |
| + fs.mkdirSync(certDir) | |
| + } | |
| + console.log('generate keystore') | |
| + await keystore.generate('RSA', 2048, {alg: 'RS256', use: 'sig'}) | |
| + fs.writeFileSync(keystoreFile, JSON.stringify(keystore.toJSON(true))) | |
| + } else { | |
| + console.log('import keystore') | |
| + const ks = fs.readFileSync(join('.cert', 'keystore.json')) | |
| + return await JWK.asKeyStore(ks.toString()) | |
| + } | |
| +} | |
| + | |
| +exports.getSigningKey = async function () { | |
| + | |
| + // Get keystore | |
| + const keystore = await exports.getKeystore(); | |
| + | |
| + // Use first sig key | |
| + return keystore.all({use: 'sig'})[0] | |
| +} | |
| + | |
| +exports.createSignedTransaction = async function (input) { | |
| + | |
| + try { | |
| + return await exports.getToken(input, await exports.getSigningKey()) | |
| + } catch (err) { | |
| + console.error('Error reading private key' + err) | |
| + throw Error('Error reading private key' + err) | |
| + } | |
| +} | |
| + | |
| +exports.verifySignature = async function (jwtString, publicKey) { | |
| + return !!jwt.verify(jwtString, publicKey) | |
| +} | |
| + | |
| +exports.getPublicKey = async function (jwksUrl) { | |
| + const jwks = await sendGetRequest(jwksUrl) | |
| + const signingKey = await exports.getSigningKey(); | |
| + return jwkToPem(signingKey.toJSON()) | |
| +} | |
| \ No newline at end of file | |
| Index: routes/transactions.js | |
| IDEA additional info: | |
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
| <+>UTF-8 | |
| =================================================================== | |
| diff --git a/routes/transactions.js b/routes/transactions.js | |
| --- a/routes/transactions.js (revision 40ca25944a82c90d4ab828db846c438b14c93035) | |
| +++ b/routes/transactions.js (date 1634904746306) | |
| @@ -8,6 +8,9 @@ | |
| const jose = require("node-jose"); | |
| const fs = require("fs"); | |
| const axios = require("axios"); | |
| +const {JWK} = require("node-jose"); | |
| +const {join} = require("path"); | |
| +const {verifySignature, getPublicKey} = require("../crypto"); | |
| function debitAccount(accountFrom, amount) { | |
| @@ -107,26 +110,31 @@ | |
| router.get('/jwks', async function (req, res) { | |
| - // Create new keystore | |
| - const keystore = jose.JWK.createKeyStore(); | |
| - | |
| // Add our private key from file to the keystore | |
| - await keystore.add(fs.readFileSync('./private.key').toString(), 'pem') | |
| + console.log('/jwks: Reading keystore from json file into memory') | |
| + const keystoreAsJsonString = fs.readFileSync(join('.cert', 'keystore.json')).toString(); | |
| + const keystore = await JWK.asKeyStore(keystoreAsJsonString) | |
| // Return our keystore (only the public key derived from the imported private key) in JWKS (JSON Web Key Set) format | |
| - console.log('/jwks: Exporting keystore and returning it') | |
| + console.log('/jwks: Returning keystore without private key') | |
| return res.send(keystore.toJSON()) | |
| }) | |
| +async function convertCurrency(payload, accountTo) { | |
| + let amount = payload.amount | |
| + if (accountTo.currency !== payload.currency) { | |
| + const rate = await getRates(payload.currency, accountTo.currency) | |
| + amount = parseInt((parseInt(amount) * parseFloat(rate)).toFixed(0)) | |
| + } | |
| + return amount; | |
| +} | |
| + | |
| router.post('/b2b', async function (req, res) { | |
| try { | |
| const components = req.body.jwt.split('.') | |
| - | |
| const payload = JSON.parse(base64url.decode(components[1])) | |
| - | |
| - | |
| const accountTo = await Account.findOne({number: payload.accountTo}) | |
| if (!accountTo) { | |
| @@ -134,8 +142,8 @@ | |
| } | |
| const accountFromBankPrefix = payload.accountFrom.substring(0, 3) | |
| - | |
| const accountFromBank = await Bank.findOne({bankPrefix: accountFromBankPrefix}) | |
| + | |
| if (!accountFromBank) { | |
| const result = await refreshListOfBanksFromCentralBank(); | |
| if (typeof result.error !== 'undefined') { | |
| @@ -148,25 +156,19 @@ | |
| } | |
| } | |
| - | |
| // Validate signature | |
| - // | |
| - // const jwks = await sendGetRequest(accountFromBank.jwksUrl) | |
| - // | |
| - // const keystore = jose.JWK.asKeyStore(jwks) | |
| - // try { | |
| - // await jose.JWKS.createVerify(keystore).verify(req.body.jwt) | |
| - // } catch (e) { | |
| - // return res.status(400).send({error: 'Invalid signature'}) | |
| - // } | |
| - let amount = payload.amount | |
| - if (accountTo.currency !== payload.currency) { | |
| - const rate = await getRates(payload.currency, accountTo.currency) | |
| - amount = parseInt((parseInt(amount) * parseFloat(rate)).toFixed(0)) | |
| + try { | |
| + const publicKey = await getPublicKey(accountFromBank.jwksUrl) | |
| + await verifySignature(req.body.jwt, publicKey); | |
| + } catch (e) { | |
| + return res.status(400).send({error: 'Signature verification failed: ' + e.message}) | |
| } | |
| + | |
| + let amount = await convertCurrency(payload, accountTo); | |
| const accountToOwner = await User.findOne({_id: accountTo.userId}) | |
| + | |
| accountTo.balance += amount | |
| await accountTo.save(); | |
| Index: package.json | |
| IDEA additional info: | |
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
| <+>UTF-8 | |
| =================================================================== | |
| diff --git a/package.json b/package.json | |
| --- a/package.json (revision 40ca25944a82c90d4ab828db846c438b14c93035) | |
| +++ b/package.json (date 1634894314171) | |
| @@ -13,17 +13,19 @@ | |
| "author": "juliataro", | |
| "license": "ISC", | |
| "dependencies": { | |
| + "axios": "^0.23.0", | |
| "base64url": "^3.0.1", | |
| "bcrypt": "^5.0.1", | |
| "dotenv": "^10.0.0", | |
| "express": "^4.17.1", | |
| "jose": "^3.19.0", | |
| + "jsonwebtoken": "^8.5.1", | |
| + "jwk-to-pem": "^2.0.5", | |
| "md5": "^2.3.0", | |
| "mongoose": "^6.0.6", | |
| "node-fetch": "^2.6.1", | |
| "node-jose": "^2.0.0", | |
| "swagger-ui-express": "^4.1.6", | |
| - "yamljs": "^0.3.0", | |
| - "axios": "^0.23.0" | |
| + "yamljs": "^0.3.0" | |
| } | |
| } | |
| Index: package-lock.json | |
| IDEA additional info: | |
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
| <+>UTF-8 | |
| =================================================================== | |
| diff --git a/package-lock.json b/package-lock.json | |
| --- a/package-lock.json (revision 40ca25944a82c90d4ab828db846c438b14c93035) | |
| +++ b/package-lock.json (date 1634894314170) | |
| @@ -9,22 +9,20 @@ | |
| "version": "0.0.1", | |
| "license": "ISC", | |
| "dependencies": { | |
| + "axios": "^0.23.0", | |
| "base64url": "^3.0.1", | |
| "bcrypt": "^5.0.1", | |
| "dotenv": "^10.0.0", | |
| - "exchange-rates-api": "^1.1.0", | |
| "express": "^4.17.1", | |
| "jose": "^3.19.0", | |
| + "jsonwebtoken": "^8.5.1", | |
| + "jwk-to-pem": "^2.0.5", | |
| "md5": "^2.3.0", | |
| "mongoose": "^6.0.6", | |
| "node-fetch": "^2.6.1", | |
| "node-jose": "^2.0.0", | |
| "swagger-ui-express": "^4.1.6", | |
| "yamljs": "^0.3.0" | |
| - }, | |
| - "devDependencies": { | |
| - "axios": "^0.23.0", | |
| - "exchangerates-wrapper": "^0.0.4" | |
| } | |
| }, | |
| "node_modules/@mapbox/node-pre-gyp": { | |
| @@ -149,11 +147,21 @@ | |
| "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | |
| "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | |
| }, | |
| + "node_modules/asn1.js": { | |
| + "version": "5.4.1", | |
| + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", | |
| + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", | |
| + "dependencies": { | |
| + "bn.js": "^4.0.0", | |
| + "inherits": "^2.0.1", | |
| + "minimalistic-assert": "^1.0.0", | |
| + "safer-buffer": "^2.1.0" | |
| + } | |
| + }, | |
| "node_modules/axios": { | |
| "version": "0.23.0", | |
| "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", | |
| "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", | |
| - "dev": true, | |
| "dependencies": { | |
| "follow-redirects": "^1.14.4" | |
| } | |
| @@ -203,6 +211,11 @@ | |
| "node": ">= 10.0.0" | |
| } | |
| }, | |
| + "node_modules/bn.js": { | |
| + "version": "4.12.0", | |
| + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", | |
| + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" | |
| + }, | |
| "node_modules/body-parser": { | |
| "version": "1.19.0", | |
| "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", | |
| @@ -232,6 +245,11 @@ | |
| "concat-map": "0.0.1" | |
| } | |
| }, | |
| + "node_modules/brorand": { | |
| + "version": "1.1.0", | |
| + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", | |
| + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" | |
| + }, | |
| "node_modules/bson": { | |
| "version": "4.5.2", | |
| "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.2.tgz", | |
| @@ -266,6 +284,11 @@ | |
| "ieee754": "^1.1.13" | |
| } | |
| }, | |
| + "node_modules/buffer-equal-constant-time": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", | |
| + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" | |
| + }, | |
| "node_modules/bytes": { | |
| "version": "3.1.0", | |
| "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", | |
| @@ -353,11 +376,6 @@ | |
| "node": "*" | |
| } | |
| }, | |
| - "node_modules/date-fns": { | |
| - "version": "1.30.1", | |
| - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", | |
| - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" | |
| - }, | |
| "node_modules/debug": { | |
| "version": "2.6.9", | |
| "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | |
| @@ -411,11 +429,38 @@ | |
| "node": ">=10" | |
| } | |
| }, | |
| + "node_modules/ecdsa-sig-formatter": { | |
| + "version": "1.0.11", | |
| + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", | |
| + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", | |
| + "dependencies": { | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| "node_modules/ee-first": { | |
| "version": "1.1.1", | |
| "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | |
| "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | |
| }, | |
| + "node_modules/elliptic": { | |
| + "version": "6.5.4", | |
| + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", | |
| + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", | |
| + "dependencies": { | |
| + "bn.js": "^4.11.9", | |
| + "brorand": "^1.1.0", | |
| + "hash.js": "^1.0.0", | |
| + "hmac-drbg": "^1.0.1", | |
| + "inherits": "^2.0.4", | |
| + "minimalistic-assert": "^1.0.1", | |
| + "minimalistic-crypto-utils": "^1.0.1" | |
| + } | |
| + }, | |
| + "node_modules/elliptic/node_modules/inherits": { | |
| + "version": "2.0.4", | |
| + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | |
| + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | |
| + }, | |
| "node_modules/encodeurl": { | |
| "version": "1.0.2", | |
| "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", | |
| @@ -424,25 +469,6 @@ | |
| "node": ">= 0.8" | |
| } | |
| }, | |
| - "node_modules/encoding": { | |
| - "version": "0.1.13", | |
| - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", | |
| - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", | |
| - "dependencies": { | |
| - "iconv-lite": "^0.6.2" | |
| - } | |
| - }, | |
| - "node_modules/encoding/node_modules/iconv-lite": { | |
| - "version": "0.6.3", | |
| - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", | |
| - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", | |
| - "dependencies": { | |
| - "safer-buffer": ">= 2.1.2 < 3.0.0" | |
| - }, | |
| - "engines": { | |
| - "node": ">=0.10.0" | |
| - } | |
| - }, | |
| "node_modules/es6-promise": { | |
| "version": "4.2.8", | |
| "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", | |
| @@ -461,33 +487,6 @@ | |
| "node": ">= 0.6" | |
| } | |
| }, | |
| - "node_modules/exchange-rates-api": { | |
| - "version": "1.1.0", | |
| - "resolved": "https://registry.npmjs.org/exchange-rates-api/-/exchange-rates-api-1.1.0.tgz", | |
| - "integrity": "sha512-bY7g1Or6zsVpaJuiKqgcy1BGsH61mqKyl+NxTwlrAn+w0QYIDkye3Jjcfa9yDpzxNDSGNoFAn6mR5e+5WDTYvg==", | |
| - "dependencies": { | |
| - "date-fns": "^1.30.1", | |
| - "isomorphic-fetch": "^2.2.1" | |
| - } | |
| - }, | |
| - "node_modules/exchangerates-wrapper": { | |
| - "version": "0.0.4", | |
| - "resolved": "https://registry.npmjs.org/exchangerates-wrapper/-/exchangerates-wrapper-0.0.4.tgz", | |
| - "integrity": "sha512-DiSx+Ze/IgmklnYKFw9dKaX+xHeQWEEZ/OoKnu8jWcN0fLhdOreAZtFD8NNRGV79rPpgnTmJysquD3YvOJNoBw==", | |
| - "dev": true, | |
| - "dependencies": { | |
| - "axios": "^0.21.1" | |
| - } | |
| - }, | |
| - "node_modules/exchangerates-wrapper/node_modules/axios": { | |
| - "version": "0.21.4", | |
| - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", | |
| - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", | |
| - "dev": true, | |
| - "dependencies": { | |
| - "follow-redirects": "^1.14.0" | |
| - } | |
| - }, | |
| "node_modules/express": { | |
| "version": "4.17.1", | |
| "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", | |
| @@ -549,7 +548,6 @@ | |
| "version": "1.14.4", | |
| "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", | |
| "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", | |
| - "dev": true, | |
| "funding": [ | |
| { | |
| "type": "individual", | |
| @@ -636,6 +634,25 @@ | |
| "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", | |
| "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" | |
| }, | |
| + "node_modules/hash.js": { | |
| + "version": "1.1.7", | |
| + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", | |
| + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", | |
| + "dependencies": { | |
| + "inherits": "^2.0.3", | |
| + "minimalistic-assert": "^1.0.1" | |
| + } | |
| + }, | |
| + "node_modules/hmac-drbg": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", | |
| + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", | |
| + "dependencies": { | |
| + "hash.js": "^1.0.3", | |
| + "minimalistic-assert": "^1.0.0", | |
| + "minimalistic-crypto-utils": "^1.0.1" | |
| + } | |
| + }, | |
| "node_modules/http-errors": { | |
| "version": "1.7.2", | |
| "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | |
| @@ -752,37 +769,11 @@ | |
| "node": ">=0.10.0" | |
| } | |
| }, | |
| - "node_modules/is-stream": { | |
| - "version": "1.1.0", | |
| - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", | |
| - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", | |
| - "engines": { | |
| - "node": ">=0.10.0" | |
| - } | |
| - }, | |
| "node_modules/isarray": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | |
| "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" | |
| }, | |
| - "node_modules/isomorphic-fetch": { | |
| - "version": "2.2.1", | |
| - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", | |
| - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", | |
| - "dependencies": { | |
| - "node-fetch": "^1.0.1", | |
| - "whatwg-fetch": ">=0.10.0" | |
| - } | |
| - }, | |
| - "node_modules/isomorphic-fetch/node_modules/node-fetch": { | |
| - "version": "1.7.3", | |
| - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", | |
| - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", | |
| - "dependencies": { | |
| - "encoding": "^0.1.11", | |
| - "is-stream": "^1.0.1" | |
| - } | |
| - }, | |
| "node_modules/jose": { | |
| "version": "3.19.0", | |
| "resolved": "https://registry.npmjs.org/jose/-/jose-3.19.0.tgz", | |
| @@ -791,6 +782,69 @@ | |
| "url": "https://github.com/sponsors/panva" | |
| } | |
| }, | |
| + "node_modules/jsonwebtoken": { | |
| + "version": "8.5.1", | |
| + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", | |
| + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", | |
| + "dependencies": { | |
| + "jws": "^3.2.2", | |
| + "lodash.includes": "^4.3.0", | |
| + "lodash.isboolean": "^3.0.3", | |
| + "lodash.isinteger": "^4.0.4", | |
| + "lodash.isnumber": "^3.0.3", | |
| + "lodash.isplainobject": "^4.0.6", | |
| + "lodash.isstring": "^4.0.1", | |
| + "lodash.once": "^4.0.0", | |
| + "ms": "^2.1.1", | |
| + "semver": "^5.6.0" | |
| + }, | |
| + "engines": { | |
| + "node": ">=4", | |
| + "npm": ">=1.4.28" | |
| + } | |
| + }, | |
| + "node_modules/jsonwebtoken/node_modules/ms": { | |
| + "version": "2.1.3", | |
| + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | |
| + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" | |
| + }, | |
| + "node_modules/jsonwebtoken/node_modules/semver": { | |
| + "version": "5.7.1", | |
| + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | |
| + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | |
| + "bin": { | |
| + "semver": "bin/semver" | |
| + } | |
| + }, | |
| + "node_modules/jwa": { | |
| + "version": "1.4.1", | |
| + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", | |
| + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", | |
| + "dependencies": { | |
| + "buffer-equal-constant-time": "1.0.1", | |
| + "ecdsa-sig-formatter": "1.0.11", | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| + "node_modules/jwk-to-pem": { | |
| + "version": "2.0.5", | |
| + "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-2.0.5.tgz", | |
| + "integrity": "sha512-L90jwellhO8jRKYwbssU9ifaMVqajzj3fpRjDKcsDzrslU9syRbFqfkXtT4B89HYAap+xsxNcxgBSB09ig+a7A==", | |
| + "dependencies": { | |
| + "asn1.js": "^5.3.0", | |
| + "elliptic": "^6.5.4", | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| + "node_modules/jws": { | |
| + "version": "3.2.2", | |
| + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", | |
| + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", | |
| + "dependencies": { | |
| + "jwa": "^1.4.1", | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| "node_modules/kareem": { | |
| "version": "2.3.2", | |
| "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", | |
| @@ -801,6 +855,41 @@ | |
| "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | |
| "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | |
| }, | |
| + "node_modules/lodash.includes": { | |
| + "version": "4.3.0", | |
| + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", | |
| + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" | |
| + }, | |
| + "node_modules/lodash.isboolean": { | |
| + "version": "3.0.3", | |
| + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", | |
| + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" | |
| + }, | |
| + "node_modules/lodash.isinteger": { | |
| + "version": "4.0.4", | |
| + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", | |
| + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" | |
| + }, | |
| + "node_modules/lodash.isnumber": { | |
| + "version": "3.0.3", | |
| + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", | |
| + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" | |
| + }, | |
| + "node_modules/lodash.isplainobject": { | |
| + "version": "4.0.6", | |
| + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", | |
| + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" | |
| + }, | |
| + "node_modules/lodash.isstring": { | |
| + "version": "4.0.1", | |
| + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", | |
| + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" | |
| + }, | |
| + "node_modules/lodash.once": { | |
| + "version": "4.1.1", | |
| + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", | |
| + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" | |
| + }, | |
| "node_modules/long": { | |
| "version": "4.0.0", | |
| "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", | |
| @@ -906,6 +995,16 @@ | |
| "node": ">= 0.6" | |
| } | |
| }, | |
| + "node_modules/minimalistic-assert": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", | |
| + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" | |
| + }, | |
| + "node_modules/minimalistic-crypto-utils": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", | |
| + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" | |
| + }, | |
| "node_modules/minimatch": { | |
| "version": "3.0.4", | |
| "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | |
| @@ -1569,11 +1668,6 @@ | |
| "node": ">=10.4" | |
| } | |
| }, | |
| - "node_modules/whatwg-fetch": { | |
| - "version": "3.6.2", | |
| - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", | |
| - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" | |
| - }, | |
| "node_modules/whatwg-url": { | |
| "version": "9.1.0", | |
| "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", | |
| @@ -1723,11 +1817,21 @@ | |
| "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", | |
| "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" | |
| }, | |
| + "asn1.js": { | |
| + "version": "5.4.1", | |
| + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", | |
| + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", | |
| + "requires": { | |
| + "bn.js": "^4.0.0", | |
| + "inherits": "^2.0.1", | |
| + "minimalistic-assert": "^1.0.0", | |
| + "safer-buffer": "^2.1.0" | |
| + } | |
| + }, | |
| "axios": { | |
| "version": "0.23.0", | |
| "resolved": "https://registry.npmjs.org/axios/-/axios-0.23.0.tgz", | |
| "integrity": "sha512-NmvAE4i0YAv5cKq8zlDoPd1VLKAqX5oLuZKs8xkJa4qi6RGn0uhCYFjWtHHC9EM/MwOwYWOs53W+V0aqEXq1sg==", | |
| - "dev": true, | |
| "requires": { | |
| "follow-redirects": "^1.14.4" | |
| } | |
| @@ -1756,6 +1860,11 @@ | |
| "node-addon-api": "^3.1.0" | |
| } | |
| }, | |
| + "bn.js": { | |
| + "version": "4.12.0", | |
| + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", | |
| + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" | |
| + }, | |
| "body-parser": { | |
| "version": "1.19.0", | |
| "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", | |
| @@ -1782,6 +1891,11 @@ | |
| "concat-map": "0.0.1" | |
| } | |
| }, | |
| + "brorand": { | |
| + "version": "1.1.0", | |
| + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", | |
| + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" | |
| + }, | |
| "bson": { | |
| "version": "4.5.2", | |
| "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.2.tgz", | |
| @@ -1799,6 +1913,11 @@ | |
| "ieee754": "^1.1.13" | |
| } | |
| }, | |
| + "buffer-equal-constant-time": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", | |
| + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" | |
| + }, | |
| "bytes": { | |
| "version": "3.1.0", | |
| "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", | |
| @@ -1862,11 +1981,6 @@ | |
| "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", | |
| "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" | |
| }, | |
| - "date-fns": { | |
| - "version": "1.30.1", | |
| - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", | |
| - "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==" | |
| - }, | |
| "debug": { | |
| "version": "2.6.9", | |
| "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | |
| @@ -1905,34 +2019,45 @@ | |
| "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", | |
| "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" | |
| }, | |
| + "ecdsa-sig-formatter": { | |
| + "version": "1.0.11", | |
| + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", | |
| + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", | |
| + "requires": { | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| "ee-first": { | |
| "version": "1.1.1", | |
| "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", | |
| "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" | |
| }, | |
| + "elliptic": { | |
| + "version": "6.5.4", | |
| + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", | |
| + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", | |
| + "requires": { | |
| + "bn.js": "^4.11.9", | |
| + "brorand": "^1.1.0", | |
| + "hash.js": "^1.0.0", | |
| + "hmac-drbg": "^1.0.1", | |
| + "inherits": "^2.0.4", | |
| + "minimalistic-assert": "^1.0.1", | |
| + "minimalistic-crypto-utils": "^1.0.1" | |
| + }, | |
| + "dependencies": { | |
| + "inherits": { | |
| + "version": "2.0.4", | |
| + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | |
| + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | |
| + } | |
| + } | |
| + }, | |
| "encodeurl": { | |
| "version": "1.0.2", | |
| "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", | |
| "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" | |
| }, | |
| - "encoding": { | |
| - "version": "0.1.13", | |
| - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", | |
| - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", | |
| - "requires": { | |
| - "iconv-lite": "^0.6.2" | |
| - }, | |
| - "dependencies": { | |
| - "iconv-lite": { | |
| - "version": "0.6.3", | |
| - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", | |
| - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", | |
| - "requires": { | |
| - "safer-buffer": ">= 2.1.2 < 3.0.0" | |
| - } | |
| - } | |
| - } | |
| - }, | |
| "es6-promise": { | |
| "version": "4.2.8", | |
| "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", | |
| @@ -1948,35 +2073,6 @@ | |
| "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", | |
| "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" | |
| }, | |
| - "exchange-rates-api": { | |
| - "version": "1.1.0", | |
| - "resolved": "https://registry.npmjs.org/exchange-rates-api/-/exchange-rates-api-1.1.0.tgz", | |
| - "integrity": "sha512-bY7g1Or6zsVpaJuiKqgcy1BGsH61mqKyl+NxTwlrAn+w0QYIDkye3Jjcfa9yDpzxNDSGNoFAn6mR5e+5WDTYvg==", | |
| - "requires": { | |
| - "date-fns": "^1.30.1", | |
| - "isomorphic-fetch": "^2.2.1" | |
| - } | |
| - }, | |
| - "exchangerates-wrapper": { | |
| - "version": "0.0.4", | |
| - "resolved": "https://registry.npmjs.org/exchangerates-wrapper/-/exchangerates-wrapper-0.0.4.tgz", | |
| - "integrity": "sha512-DiSx+Ze/IgmklnYKFw9dKaX+xHeQWEEZ/OoKnu8jWcN0fLhdOreAZtFD8NNRGV79rPpgnTmJysquD3YvOJNoBw==", | |
| - "dev": true, | |
| - "requires": { | |
| - "axios": "^0.21.1" | |
| - }, | |
| - "dependencies": { | |
| - "axios": { | |
| - "version": "0.21.4", | |
| - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", | |
| - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", | |
| - "dev": true, | |
| - "requires": { | |
| - "follow-redirects": "^1.14.0" | |
| - } | |
| - } | |
| - } | |
| - }, | |
| "express": { | |
| "version": "4.17.1", | |
| "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", | |
| @@ -2031,8 +2127,7 @@ | |
| "follow-redirects": { | |
| "version": "1.14.4", | |
| "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", | |
| - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", | |
| - "dev": true | |
| + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" | |
| }, | |
| "forwarded": { | |
| "version": "0.2.0", | |
| @@ -2090,6 +2185,25 @@ | |
| "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", | |
| "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" | |
| }, | |
| + "hash.js": { | |
| + "version": "1.1.7", | |
| + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", | |
| + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", | |
| + "requires": { | |
| + "inherits": "^2.0.3", | |
| + "minimalistic-assert": "^1.0.1" | |
| + } | |
| + }, | |
| + "hmac-drbg": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", | |
| + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", | |
| + "requires": { | |
| + "hash.js": "^1.0.3", | |
| + "minimalistic-assert": "^1.0.0", | |
| + "minimalistic-crypto-utils": "^1.0.1" | |
| + } | |
| + }, | |
| "http-errors": { | |
| "version": "1.7.2", | |
| "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | |
| @@ -2171,41 +2285,74 @@ | |
| "number-is-nan": "^1.0.0" | |
| } | |
| }, | |
| - "is-stream": { | |
| - "version": "1.1.0", | |
| - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", | |
| - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" | |
| - }, | |
| "isarray": { | |
| "version": "1.0.0", | |
| "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", | |
| "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" | |
| }, | |
| - "isomorphic-fetch": { | |
| - "version": "2.2.1", | |
| - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", | |
| - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", | |
| - "requires": { | |
| - "node-fetch": "^1.0.1", | |
| - "whatwg-fetch": ">=0.10.0" | |
| - }, | |
| - "dependencies": { | |
| - "node-fetch": { | |
| - "version": "1.7.3", | |
| - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", | |
| - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", | |
| - "requires": { | |
| - "encoding": "^0.1.11", | |
| - "is-stream": "^1.0.1" | |
| - } | |
| - } | |
| - } | |
| - }, | |
| "jose": { | |
| "version": "3.19.0", | |
| "resolved": "https://registry.npmjs.org/jose/-/jose-3.19.0.tgz", | |
| "integrity": "sha512-G5imz/7oSe8Ohg4EMEhGhMhN+yzACMw7NC7ZrEYSoJekQXHPf+TPQNc/XJkYRm6TFWIbf3HA4OHZhdRv8KsskA==" | |
| }, | |
| + "jsonwebtoken": { | |
| + "version": "8.5.1", | |
| + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", | |
| + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", | |
| + "requires": { | |
| + "jws": "^3.2.2", | |
| + "lodash.includes": "^4.3.0", | |
| + "lodash.isboolean": "^3.0.3", | |
| + "lodash.isinteger": "^4.0.4", | |
| + "lodash.isnumber": "^3.0.3", | |
| + "lodash.isplainobject": "^4.0.6", | |
| + "lodash.isstring": "^4.0.1", | |
| + "lodash.once": "^4.0.0", | |
| + "ms": "^2.1.1", | |
| + "semver": "^5.6.0" | |
| + }, | |
| + "dependencies": { | |
| + "ms": { | |
| + "version": "2.1.3", | |
| + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", | |
| + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" | |
| + }, | |
| + "semver": { | |
| + "version": "5.7.1", | |
| + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | |
| + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" | |
| + } | |
| + } | |
| + }, | |
| + "jwa": { | |
| + "version": "1.4.1", | |
| + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", | |
| + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", | |
| + "requires": { | |
| + "buffer-equal-constant-time": "1.0.1", | |
| + "ecdsa-sig-formatter": "1.0.11", | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| + "jwk-to-pem": { | |
| + "version": "2.0.5", | |
| + "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-2.0.5.tgz", | |
| + "integrity": "sha512-L90jwellhO8jRKYwbssU9ifaMVqajzj3fpRjDKcsDzrslU9syRbFqfkXtT4B89HYAap+xsxNcxgBSB09ig+a7A==", | |
| + "requires": { | |
| + "asn1.js": "^5.3.0", | |
| + "elliptic": "^6.5.4", | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| + "jws": { | |
| + "version": "3.2.2", | |
| + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", | |
| + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", | |
| + "requires": { | |
| + "jwa": "^1.4.1", | |
| + "safe-buffer": "^5.0.1" | |
| + } | |
| + }, | |
| "kareem": { | |
| "version": "2.3.2", | |
| "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", | |
| @@ -2216,6 +2363,41 @@ | |
| "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", | |
| "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" | |
| }, | |
| + "lodash.includes": { | |
| + "version": "4.3.0", | |
| + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", | |
| + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" | |
| + }, | |
| + "lodash.isboolean": { | |
| + "version": "3.0.3", | |
| + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", | |
| + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" | |
| + }, | |
| + "lodash.isinteger": { | |
| + "version": "4.0.4", | |
| + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", | |
| + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" | |
| + }, | |
| + "lodash.isnumber": { | |
| + "version": "3.0.3", | |
| + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", | |
| + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" | |
| + }, | |
| + "lodash.isplainobject": { | |
| + "version": "4.0.6", | |
| + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", | |
| + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" | |
| + }, | |
| + "lodash.isstring": { | |
| + "version": "4.0.1", | |
| + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", | |
| + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" | |
| + }, | |
| + "lodash.once": { | |
| + "version": "4.1.1", | |
| + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", | |
| + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" | |
| + }, | |
| "long": { | |
| "version": "4.0.0", | |
| "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", | |
| @@ -2293,6 +2475,16 @@ | |
| "mime-db": "1.49.0" | |
| } | |
| }, | |
| + "minimalistic-assert": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", | |
| + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" | |
| + }, | |
| + "minimalistic-crypto-utils": { | |
| + "version": "1.0.1", | |
| + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", | |
| + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" | |
| + }, | |
| "minimatch": { | |
| "version": "3.0.4", | |
| "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", | |
| @@ -2811,11 +3003,6 @@ | |
| "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", | |
| "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" | |
| }, | |
| - "whatwg-fetch": { | |
| - "version": "3.6.2", | |
| - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", | |
| - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" | |
| - }, | |
| "whatwg-url": { | |
| "version": "9.1.0", | |
| "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", | |
| Index: middlewares.js | |
| IDEA additional info: | |
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
| <+>UTF-8 | |
| =================================================================== | |
| diff --git a/middlewares.js b/middlewares.js | |
| --- a/middlewares.js (revision 40ca25944a82c90d4ab828db846c438b14c93035) | |
| +++ b/middlewares.js (date 1634904495152) | |
| @@ -4,9 +4,7 @@ | |
| const Session = require("./models/Session") | |
| const Transaction = require("./models/Transaction") | |
| const fetch = require("node-fetch") | |
| -const jose = require('node-jose') | |
| -const fs = require('fs') | |
| -//const {sendRequest} = require("./middlewares"); | |
| +const {createSignedTransaction} = require('./crypto') | |
| exports.verifyToken = async (req, res, next) => { | |
| @@ -95,19 +93,6 @@ | |
| await transaction.save() | |
| } | |
| -async function createSignedTransaction(input) { | |
| - | |
| - let privateKey | |
| - try { | |
| - privateKey = fs.readFileSync('private.key', 'utf8') | |
| - const keystore = jose.JWK.createKeyStore(); | |
| - const key = await keystore.add(privateKey, 'pem') | |
| - return await jose.JWS.createSign({format: 'compact'}, key).update(JSON.stringify(input), "utf8").final() | |
| - } catch (err) { | |
| - console.error('Error reading private key' + err) | |
| - throw Error('Error reading private key' + err) | |
| - } | |
| -} | |
| async function sendRequestToBank(destinationBank, transactionAsJwt) { | |
| @@ -144,7 +129,7 @@ | |
| return JSON.parse(responseText); | |
| } catch (e) { | |
| - throw new Error('sendRequest('+url+'): ' + e.message + (typeof responseText === 'undefined' ? '': '|' + responseText)) | |
| + throw new Error('sendRequest(' + url + '): ' + e.message + (typeof responseText === 'undefined' ? '' : '|' + responseText)) | |
| } | |
| } | |
| @@ -202,6 +187,7 @@ | |
| } | |
| try { | |
| + | |
| const response = await sendRequestToBank(destinationBank, await createSignedTransaction({ | |
| accountFrom: transaction.accountFrom, | |
| accountTo: transaction.accountTo, | |
| @@ -213,14 +199,12 @@ | |
| if (typeof response.error !== 'undefined') { | |
| return await setStatus(transaction, 'Failed', response.error) | |
| - | |
| } | |
| transaction.receiverName = response.receiverName | |
| console.log('Completed transaction ' + transaction._id) | |
| return await setStatus(transaction, 'Completed', '') | |
| - | |
| } catch (e) { | |
| console.log(e) | |
| console.log('Error sending request to destination bank:') | |
| @@ -228,7 +212,6 @@ | |
| console.log('- Error is: ' + e.message) | |
| return await setStatus(transaction, 'Pending', e.message) | |
| - | |
| } | |
| }, Error) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment