diff --git a/server/web3service/controllers/jwt.js b/server/web3service/controllers/jwt.js index a6f2c13..66d536c 100644 --- a/server/web3service/controllers/jwt.js +++ b/server/web3service/controllers/jwt.js @@ -103,9 +103,9 @@ function asyncVerify(jwksUri, data) { } async function verify(session) { - console.log('aaaaaaaaaaaaaa'); const postData = session.getBody(); const jwksUri = postData['jwksUri']; + console.log('aaaaaaaaaaaaaa', postData); //const arr = postData['data'].split('.'); //const header = base64url.decode(arr[0]); //const payload = base64url.decode(arr[1]); diff --git a/server/web3service/package-lock.json b/server/web3service/package-lock.json index e6445b5..9eeaff1 100644 --- a/server/web3service/package-lock.json +++ b/server/web3service/package-lock.json @@ -12,6 +12,7 @@ "base64url": "^3.0.1", "common": "file:../common", "express": "^4.17.2", + "fast-jwt": "^4.0.1", "j7": "file:../../third_party/j7", "jsonwebtoken": "^9.0.2", "jwks-rsa": "^3.1.0", @@ -496,6 +497,14 @@ "@ethersproject/strings": "^5.7.0" } }, + "node_modules/@lukeed/ms": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "engines": { + "node": ">=8" + } + }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -725,6 +734,17 @@ "safer-buffer": "~2.1.0" } }, + "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/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -1607,6 +1627,20 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "node_modules/fast-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-4.0.1.tgz", + "integrity": "sha512-+mdSoH0QdOdFSbbGBctJu7L1yfXRtbmjbVJ4W/PEjyvivobDena0RKwihtBkOML1P+kUJ1QuewnH8u+mROsR1w==", + "dependencies": { + "@lukeed/ms": "^2.0.1", + "asn1.js": "^5.4.1", + "ecdsa-sig-formatter": "^1.0.11", + "mnemonist": "^0.39.5" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -2512,6 +2546,14 @@ "node": ">=4" } }, + "node_modules/mnemonist": { + "version": "0.39.8", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.8.tgz", + "integrity": "sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==", + "dependencies": { + "obliterator": "^2.0.1" + } + }, "node_modules/mock-fs": { "version": "4.14.0", "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", @@ -2707,6 +2749,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, "node_modules/oboe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", @@ -4452,6 +4499,11 @@ "@ethersproject/strings": "^5.7.0" } }, + "@lukeed/ms": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==" + }, "@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -4662,6 +4714,17 @@ "safer-buffer": "~2.1.0" } }, + "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" + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -5393,6 +5456,17 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "fast-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/fast-jwt/-/fast-jwt-4.0.1.tgz", + "integrity": "sha512-+mdSoH0QdOdFSbbGBctJu7L1yfXRtbmjbVJ4W/PEjyvivobDena0RKwihtBkOML1P+kUJ1QuewnH8u+mROsR1w==", + "requires": { + "@lukeed/ms": "^2.0.1", + "asn1.js": "^5.4.1", + "ecdsa-sig-formatter": "^1.0.11", + "mnemonist": "^0.39.5" + } + }, "finalhandler": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", @@ -6106,6 +6180,14 @@ "mkdirp": "*" } }, + "mnemonist": { + "version": "0.39.8", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.39.8.tgz", + "integrity": "sha512-vyWo2K3fjrUw8YeeZ1zF0fy6Mu59RHokURlld8ymdUPjMlD9EC9ov1/YPqTgqRvUN9nTr3Gqfz29LYAmu0PHPQ==", + "requires": { + "obliterator": "^2.0.1" + } + }, "mock-fs": { "version": "4.14.0", "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz", @@ -6263,6 +6345,11 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, + "obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==" + }, "oboe": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz", diff --git a/server/web3service/package.json b/server/web3service/package.json index e093e64..121ced3 100644 --- a/server/web3service/package.json +++ b/server/web3service/package.json @@ -9,6 +9,7 @@ "base64url": "^3.0.1", "common": "file:../common", "express": "^4.17.2", + "fast-jwt": "^4.0.1", "j7": "file:../../third_party/j7", "jsonwebtoken": "^9.0.2", "jwks-rsa": "^3.1.0", diff --git a/server/web3sign/controllers/benftmall_trans.js b/server/web3sign/controllers/benftmall_trans.js deleted file mode 100644 index 0d9cd1f..0000000 --- a/server/web3sign/controllers/benftmall_trans.js +++ /dev/null @@ -1,130 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const bcconst = require('common/bcconst'); -const contract = require('common/contract'); -const serviceFactory = require('../services/factory'); - -async function buyPlanet(session) { - try { - const account = bcutils.toNormalAddress(session.request('account', '')); - const netId = session.request('net_id'); - const price = session.request('price'); - const currencyName = session.request('currency_name'); - const ids = utils.jsonDecode(session.request('ids', '')); - const bc = serviceFactory.create('BlockChain'); - { - const ret = await bc.init(netId); - if (!ret) { - session.rspErr(500, 'net_id error'); - return; - } - } - { - if (!bc.isValidAddress(account)) { - session.rspErr(500, 'account error'); - return; - } - } - - const currency = bc.getCurrencyAddressByName(currencyName); - const userAddress = bc.getUserAddress(); - { - if (!bc.isValidAddress(currency)) { - session.rspErr(500, 'ceg error'); - return; - } - } - - const transModel = session.createModel('Transaction'); - const usedTokenIdModel = session.createModel('UsedTokenId'); - - const {err, seqId} = await transModel.add(account, session.requestToJson(), netId); - if (err) { - session.rspErr(500, 'server internal error'); - return; - } - - const nowTime = utils.getUtcTime(); - const transId = bcutils.genTransId - ( - bcconst.BC_FUNC_COMMON, - nowTime, - seqId, - [ - ] - ); - await transModel.update - ( - seqId, - [ - ['trans_id', transId] - ]); - const nonce = transId; - const orderId = transId; - const nftAddresses = []; - const amounts = []; - const values = [orderId, price, nowTime, nonce]; - { - for (let i = 0; i < ids.length; ++i) { - nftAddresses.push(bc.getContractAddressByName('PLANET')); - amounts.push(1); - } - } - utils.arrayToStrings(ids); - utils.arrayToStrings(amounts); - utils.arrayToStrings(values); - - const signArr = []; - { - for (let i = 0; i < ids.length * 2 + 4; ++i) { - signArr.push(''); - } - for (let i = 0; i < ids.length; ++i) { - signArr[i * 2] = ids[i]; - signArr[i * 2 + 1] = amounts[i]; - } - for (let i = 0; i < values.length; ++i) { - signArr[ids.length * 2 + i] = values[i]; - } - } - console.log([ - currency, - account, - ...nftAddresses, - ...signArr - ]); - const signature = await bc.soliditySha3Sign( - currency, - account, - ...nftAddresses, - ...signArr - ); - - const rspParams = [ - currency, - utils.jsonEncode(nftAddresses), - utils.jsonEncode(ids), - utils.jsonEncode(amounts), - utils.jsonEncode(values), - signature - ]; - utils.arrayToStrings(rspParams); - - session.rspData({ - 'trans_id' : transId, - 'order_id': orderId, - 'params': rspParams - }); - } catch (e) { - session.rspErr(1, 1); - utils.safeDumpErrStack(e); - console.log(e); - } -} - -function init() { - app.registerHandler('BeNftMallTrans', 'buyPlanet', buyPlanet); -} - -exports.init = init; diff --git a/server/web3sign/controllers/claim_box.js b/server/web3sign/controllers/claim_box.js deleted file mode 100644 index 0d21657..0000000 --- a/server/web3sign/controllers/claim_box.js +++ /dev/null @@ -1,92 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const bcconst = require('common/bcconst'); -const metaFactory = require('../metadata/factory'); -const serviceFactory = require('../services/factory'); - -async function claim(session) { - try { - const account = bcutils.toNormalAddress(session.request('account', '')); - const netId = session.request('net_id'); - const bc = serviceFactory.create('BlockChain'); - { - const ret = await bc.init(netId); - if (!ret) { - session.rspErr(500, 'net_id error'); - return; - } - } - { - if (!bc.isValidAddress(account)) { - session.rspErr(500, 'account error'); - return; - } - } - - const nftAddress = bc.getNftAddress(bcconst.BC_NFT_CLAIM_BOX); - - const transModel = session.createModel('Transaction'); - const usedTokenIdModel = session.createModel('UsedTokenId'); - - const {err, seqId} = await transModel.add(account, session.requestToJson(), netId); - if (err) { - session.rspErr(500, 'server internal error'); - return; - } - - const nowTime = utils.getUtcTime(); - const tokenId = bcutils.genTokenId( - 2006, - bcconst.BC_FUNC_COMMON, - nowTime, - 1, - seqId - ); - const transId = bcutils.genTransId - ( - bcconst.BC_TRANS_FUNC_COMMON, - nowTime, - seqId, - [ - tokenId - ] - ); - await transModel.update - ( - seqId, - [ - ['trans_id', transId] - ]); - const nonce = transId; - const signature = await bc.soliditySha3Sign( - account, - nftAddress, - nowTime, - nonce - ); - - const rspParams = [ - nftAddress, - nowTime, - nonce, - signature - ]; - utils.arrayToStrings(rspParams); - - session.rspData({ - 'trans_id' : transId, - 'params': rspParams - }); - } catch (e) { - session.rspErr(1, 1); - utils.safeDumpErrStack(e); - console.log(e); - } -} - -function init() { - app.registerHandler('ClaimBox', 'claim', claim); -} - -exports.init = init; diff --git a/server/web3sign/controllers/factory.js b/server/web3sign/controllers/factory.js index 6b0cf51..efa7007 100644 --- a/server/web3sign/controllers/factory.js +++ b/server/web3sign/controllers/factory.js @@ -6,11 +6,7 @@ function add(name) { } async function init() { - //add('claim_box'); add('activate721nft'); - //add('game_item_mall'); - //add('game_item_market'); - //add('benftmall_trans'); } exports.init = init; diff --git a/server/web3sign/controllers/game_item_mall.js b/server/web3sign/controllers/game_item_mall.js deleted file mode 100644 index e8c1895..0000000 --- a/server/web3sign/controllers/game_item_mall.js +++ /dev/null @@ -1,99 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const bcconst = require('common/bcconst'); -const contract = require('common/contract'); -const serviceFactory = require('../services/factory'); - -async function buy(session) { - try { - const account = bcutils.toNormalAddress(session.request('account', '')); - const netId = session.request('net_id'); - const price = session.request('price'); - const currencyName = session.request('currency_name'); - const bc = serviceFactory.create('BlockChain'); - { - const ret = await bc.init(netId); - if (!ret) { - session.rspErr(500, 'net_id error'); - return; - } - } - { - if (!bc.isValidAddress(account)) { - session.rspErr(500, 'account error'); - return; - } - } - - const currency = bc.getCurrencyAddressByName(currencyName); - const userAddress = bc.getUserAddress(); - { - if (!bc.isValidAddress(currency)) { - session.rspErr(500, 'ceg error'); - return; - } - } - - const transModel = session.createModel('Transaction'); - const usedTokenIdModel = session.createModel('UsedTokenId'); - - const {err, seqId} = await transModel.add(account, session.requestToJson(), netId); - if (err) { - session.rspErr(500, 'server internal error'); - return; - } - - const nowTime = utils.getUtcTime(); - const transId = bcutils.genTransId - ( - bcconst.BC_FUNC_COMMON, - nowTime, - seqId, - [ - ] - ); - await transModel.update - ( - seqId, - [ - ['trans_id', transId] - ]); - const nonce = transId; - const orderId = transId; - const signature = await bc.soliditySha3Sign( - account, - orderId, - currency, - price, - nowTime, - nonce - ); - - const rspParams = [ - orderId, - currency, - price, - nowTime, - nonce, - signature - ]; - utils.arrayToStrings(rspParams); - - session.rspData({ - 'trans_id' : transId, - 'order_id': orderId, - 'params': rspParams - }); - } catch (e) { - session.rspErr(1, 1); - utils.safeDumpErrStack(e); - console.log(e); - } -} - -function init() { - app.registerHandler('GameItemMall', 'buy', buy); -} - -exports.init = init; diff --git a/server/web3sign/controllers/game_item_market.js b/server/web3sign/controllers/game_item_market.js deleted file mode 100644 index 4ab32d7..0000000 --- a/server/web3sign/controllers/game_item_market.js +++ /dev/null @@ -1,107 +0,0 @@ -const app = require('j7/app'); -const utils = require('j7/utils'); -const bcutils = require('j7/bcutils'); -const bcconst = require('common/bcconst'); -const contract = require('common/contract'); -const serviceFactory = require('../services/factory'); - -async function buy(session) { - try { - const account = bcutils.toNormalAddress(session.request('account', '')); - const seller = bcutils.toNormalAddress(session.request('seller', '')); - const netId = session.request('net_id'); - const price = session.request('price'); - const currencyName = session.request('currency_name'); - const orderId = session.request('order_id'); - const bc = serviceFactory.create('BlockChain'); - { - const ret = await bc.init(netId); - if (!ret) { - session.rspErr(500, 'net_id error'); - return; - } - } - { - if (!bc.isValidAddress(account)) { - session.rspErr(500, 'account error'); - return; - } - } - { - if (!bc.isValidAddress(seller)) { - session.rspErr(500, 'seller error'); - return; - } - } - - const currency = bc.getCurrencyAddressByName(currencyName); - const userAddress = bc.getUserAddress(); - { - if (!bc.isValidAddress(currency)) { - session.rspErr(500, 'currency error'); - return; - } - } - - const transModel = session.createModel('Transaction'); - const usedTokenIdModel = session.createModel('UsedTokenId'); - - const {err, seqId} = await transModel.add(account, session.requestToJson(), netId); - if (err) { - session.rspErr(500, 'server internal error'); - return; - } - - const nowTime = utils.getUtcTime(); - const transId = bcutils.genTransId - ( - bcconst.BC_FUNC_COMMON, - nowTime, - seqId, - [ - ] - ); - await transModel.update - ( - seqId, - [ - ['trans_id', transId] - ]); - const nonce = transId; - const signature = await bc.soliditySha3Sign( - account, - seller, - orderId, - currency, - price, - nowTime, - nonce - ); - - const rspParams = [ - orderId, - seller, - currency, - price, - nowTime, - nonce, - signature - ]; - utils.arrayToStrings(rspParams); - - session.rspData({ - 'trans_id' : transId, - 'params': rspParams - }); - } catch (e) { - session.rspErr(1, 1); - utils.safeDumpErrStack(e); - console.log(e); - } -} - -function init() { - app.registerHandler('GameItemMarket', 'buy', buy); -} - -exports.init = init; diff --git a/server/web3sign/session.js b/server/web3sign/session.js index 9e8d977..48f1b4f 100644 --- a/server/web3sign/session.js +++ b/server/web3sign/session.js @@ -125,6 +125,10 @@ class Session { } } + getBody() { + return this.req.body; + } + } module.exports = Session;