From 2f11539eef545fc0a9761693ae55e837b460beac Mon Sep 17 00:00:00 2001 From: kaotisk Date: Mon, 3 Apr 2023 08:22:39 +0300 Subject: Added ak-zblock-show with appropriate route in API with caching feature --- api/routes/getZblock/index.js | 35 +++++++++++++++++++++++++++++++++++ api/routes/index.js | 3 +++ bin/ak-zblock-cache | 11 +++++++++++ bin/ak-zblock-show | 25 ++++--------------------- 4 files changed, 53 insertions(+), 21 deletions(-) create mode 100644 api/routes/getZblock/index.js create mode 100755 bin/ak-zblock-cache diff --git a/api/routes/getZblock/index.js b/api/routes/getZblock/index.js new file mode 100644 index 0000000..af14ae3 --- /dev/null +++ b/api/routes/getZblock/index.js @@ -0,0 +1,35 @@ +const { spawn } = require('child_process'); +const fs = require("fs"); +const config = require("../../config"); + +/* + * Gets the local latest zblock + * + * Returns: + * - JSON object + * { zlatest: "Qm..." } + * + */ +module.exports = (req, res) => { + const command = spawn("ak-zblock-cache",[req.query.zblock]); + command.stdout.on("data", data => { + }); + + command.stderr.on("data", data => { + console.log(`stderr: ${data}`); + }); + + command.on('error', (error) => { + console.log(`error: ${error.message}`); + }); + + command.on("close", code => { + console.log(`child process exited with code ${code}`); + + if ( code == 0 ) { + res.send(JSON.parse(fs.readFileSync(config.zblockDir+"/"+req.query.zblock))); + } else { + res.send({"error":"error"}); + } + }); +}; diff --git a/api/routes/index.js b/api/routes/index.js index b771758..5842757 100644 --- a/api/routes/index.js +++ b/api/routes/index.js @@ -10,6 +10,7 @@ const getSBlock = require('./getSBlock'); const getZChain = require('./getZChain'); const receiveZBlock = require('./receiveZBlock'); const receiveZChain = require('./receiveZChain'); +const getZblock = require('./getZblock'); const corsOptions = { origin: '*', optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204 @@ -34,6 +35,8 @@ router.route(settings.URL_PREFIX+'/sblock').get(getSBlock); router.route(settings.URL_PREFIX+'/zchain').get(getZChain); // Returns latest zblock from node's local chain router.route(settings.URL_PREFIX+'/zlatest').get(getZLatest); +// Returns zblock +router.route(settings.URL_PREFIX+'/zblock').get(getZblock); // Send a block to the node (zchain block) router.route(settings.URL_PREFIX+'/sblk').post(receiveZBlock); // Send a zchain link to the node (refering to a valid zchain out there) diff --git a/bin/ak-zblock-cache b/bin/ak-zblock-cache new file mode 100755 index 0000000..6551796 --- /dev/null +++ b/bin/ak-zblock-cache @@ -0,0 +1,11 @@ +#!/bin/bash + +if [ ! -z "$1" ] +then + ak-zblock-show "$1" > $AK_ZBLOCKDIR/$1 + exit 0 +else + echo not ok + exit 1 +fi + diff --git a/bin/ak-zblock-show b/bin/ak-zblock-show index 886490b..7ef9b42 100755 --- a/bin/ak-zblock-show +++ b/bin/ak-zblock-show @@ -1,17 +1,6 @@ #!/bin/bash -# ak-enter -# -# Using this tool, we can seek a whole zchain, if available from -# an IPFS CID or an IPNS link. -# -# Default (no arguments) will retrieve the local ZCHAIN starting -# from the IPFS CID stored in the file that is tracked by the -# $AK_ZLATEST environment variable. -# -# ak-enter [-n IPNS_LINK] -# ak-enter [IPFS CID] -# ak-enter -nV -# ak-enter +# ak-zblock-show +# ak-zblock [IPFS CID] # # Returns a JSON array representing the chain retrieved. # Logs messages to $LOGSFILE. @@ -24,17 +13,11 @@ logit(){ usage(){ echo "$PROGRAM - Show a zblock" - echo "-----------------------------------" echo "" echo "$PROGRAM " echo "Usage:" echo " --help, -h Print this help and exit" } -# Start of tests -#entrance="QmW5WVXCJfhb4peHG6cbEdamC24vZzMX2Vz386vpENh38U" -#entrance="QmNjQq7GkuXGF8kFT1z2Mv3i4JhY7sBXVUmHDiR1zkQjoE" -#entrance="QmbFMke1KXqnYyBBWxB74N4c5SBnJMVAiMNRcGu6x1AwQH" -# End of tests verify=1 if [ ! -z "$1" ] && [ "$1" == "-h" ] || [ "$1" == "--help" ] then @@ -112,7 +95,7 @@ counter=0 logit "[INFO]" "ZBLOCK $zblock is JSON" # Then we pass it through the filter and save it - ak-ipfs-cat $zblock | ak-json2bash > tmp-zblock + ak-ipfs-cat $zblock | jq -M | ak-json2bash > tmp-zblock # Be sure that there are the expected values # We need 'block' and 'block_signature' inside a 'zblock' @@ -148,7 +131,7 @@ counter=0 # Same as above applies to BLOCK and DATA subparts of each ZBLOCK # BLOCKS echo -n '"block":"'$block'",' - ak-ipfs-cat $block | ak-json2bash > tmp-block + ak-ipfs-cat $block | jq -M | ak-json2bash > tmp-block if [ "$?" -ne 0 ] then logit "[ERROR]" "BLOCK $block READ failed" -- cgit v1.2.3