diff --git a/README.md b/README.md index 0bbc25a..e8cc7c5 100644 --- a/README.md +++ b/README.md @@ -60,4 +60,5 @@ The API is configured to run on port 3000 by default. Use the standard Nginx rev * JSDoc & Unit tests * Rate Limiting * Helmet -* Rate Limiting \ No newline at end of file +* Rate Limiting +* Sanitize user input - mongo and api params. Just make a quick middleware \ No newline at end of file diff --git a/lib/api/block.js b/lib/api/block.js index fe81b3e..bd007bf 100644 --- a/lib/api/block.js +++ b/lib/api/block.js @@ -1,44 +1,87 @@ const Block = require('../../models/block.js'); const logger = require('../logger'); -module.exports = function BlockAPI(app) { - app.get('/block/:blockHash', (req, res) => { - getBlock(res, - { hash: req.params.blockHash }, - { rawBlock: 0 }); - }); +const MAX_BLOCKS = 200; - app.get('/blocks', (req, res) => { - res.send({ - blocks: [], - length: 0, - pagination: { - }, - }); - }); - - app.get('/rawblock/:blockHash', (req, res) => { - res.send(req.params.blockHash); - }); - - app.get('/block-index/:height', (req, res) => { - getBlock(res, { height: req.params.height }); - }); -}; - - -function getBlock(res, params, options) { +function getBlock(params, options, cb) { const defaultOptions = { _id: 0 }; Object.assign(defaultOptions, options); - Block.find(params, + Block.find( + params, defaultOptions, - (err, block) => { - if (err) { - res.status(501).send(); - logger.log('err', err); - } - res.json(block[0]); - }); + cb) + .sort({ height: 1 }) + .limit(MAX_BLOCKS); } + +module.exports = function BlockAPI(app) { + app.get('/block/:blockHash', (req, res) => { + getBlock( + { hash: req.params.blockHash }, + { rawBlock: 0 }, + (err, block) => { + if (err) { + res.status(501).send(); + logger.log('err', err); + } + res.json(block[0]); + }); + }); + + app.get('/blocks', (req, res) => { + getBlock( + {}, + { height: 1, + size: 1, + hash: 1, + time: 1, + transactionCount: 1, + poolInfo: 1 }, + (err, blocks) => { + if (err) { + res.status(501).send(); + logger.log('err', err); + } + res.json({ + blocks: blocks.map((block) => { + return { + hash: block.hash, + height: block.height, + time: block.time, + txlength: block.transactionCount + }; + }), + lenght: blocks.length, + pagination: {}, + }); + }); + }); + + app.get('/rawblock/:blockHash', (req, res) => { + getBlock( + { hash: req.params.blockHash }, + { rawBlock: 1 }, + (err, block) => { + if (err) { + res.status(501).send(); + logger.log('err', err); + } + res.json(block); + }); + }); + + app.get('/block-index/:height', (req, res) => { + getBlock( + { height: req.params.height }, + {}, + (err, block) => { + if (err) { + res.status(501).send(); + logger.log('err', err); + } + res.json(block); + }); + }); +}; diff --git a/lib/node/block.js b/lib/node/block.js index 3d72537..c6200c7 100644 --- a/lib/node/block.js +++ b/lib/node/block.js @@ -26,7 +26,7 @@ function parse(entry, block) { reward: 0, timeNormalized: block.ts, isMainChain: true, - poolInfo: Object, + poolInfo: {}, transactionCount: block.txs.length, rawBlock: rawBlock, });