kenshin samourai
5 years ago
committed by
GitHub
12 changed files with 178 additions and 6 deletions
@ -0,0 +1,79 @@ |
|||
/*! |
|||
* tracker/tracker-rest-api.js |
|||
* Copyright (c) 2016-2019, Samourai Wallet (CC BY-NC-ND 4.0 License). |
|||
*/ |
|||
'use strict' |
|||
|
|||
const qs = require('querystring') |
|||
const validator = require('validator') |
|||
const bodyParser = require('body-parser') |
|||
const Logger = require('../lib/logger') |
|||
const errors = require('../lib/errors') |
|||
const authMgr = require('../lib/auth/authorizations-manager') |
|||
const HttpServer = require('../lib/http-server/http-server') |
|||
const network = require('../lib/bitcoin/network') |
|||
const keys = require('../keys')[network.key] |
|||
|
|||
|
|||
/** |
|||
* Tracker API endpoints |
|||
*/ |
|||
class TrackerRestApi { |
|||
|
|||
/** |
|||
* Constructor |
|||
* @param {pushtx.HttpServer} httpServer - HTTP server |
|||
* @param {tracker.Tracker} tracker - tracker |
|||
*/ |
|||
constructor(httpServer, tracker) { |
|||
this.httpServer = httpServer |
|||
this.tracker = tracker |
|||
|
|||
const urlencodedParser = bodyParser.urlencoded({ extended: true }) |
|||
|
|||
// Establish routes. Proxy server strips /pushtx
|
|||
this.httpServer.app.get( |
|||
`/${keys.prefixes.support}/rescan`, |
|||
authMgr.checkHasAdminProfile.bind(authMgr), |
|||
this.getBlocksRescan.bind(this), |
|||
HttpServer.sendAuthError |
|||
) |
|||
} |
|||
|
|||
/** |
|||
* Rescan a range of blocks |
|||
*/ |
|||
async getBlocksRescan(req, res) { |
|||
// Check request arguments
|
|||
if (!req.query) |
|||
return HttpServer.sendError(res, errors.body.INVDATA) |
|||
|
|||
if (!req.query.fromHeight || !validator.isInt(req.query.fromHeight)) |
|||
return HttpServer.sendError(res, errors.body.INVDATA) |
|||
|
|||
if (req.query.toHeight && !validator.isInt(req.query.toHeight)) |
|||
return HttpServer.sendError(res, errors.body.INVDATA) |
|||
|
|||
// Retrieve the request arguments
|
|||
const fromHeight = parseInt(req.query.fromHeight) |
|||
const toHeight = req.query.toHeight ? parseInt(req.query.toHeight) : fromHeight |
|||
|
|||
if (req.query.toHeight && (toHeight < fromHeight)) |
|||
return HttpServer.sendError(res, errors.body.INVDATA) |
|||
|
|||
try { |
|||
await this.tracker.blockchainProcessor.rescanBlocks(fromHeight, toHeight) |
|||
const ret = { |
|||
status: 'Rescan complete', |
|||
fromHeight: fromHeight, |
|||
toHeight: toHeight |
|||
} |
|||
HttpServer.sendRawData(res, JSON.stringify(ret, null, 2)) |
|||
} catch(e) { |
|||
return HttpServer.sendError(res, e) |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
module.exports = TrackerRestApi |
Loading…
Reference in new issue