4 changed files with 225 additions and 1 deletions
@ -0,0 +1,136 @@ |
|||||
|
/*! |
||||
|
* accounts/wallet-rest-api.js |
||||
|
* Copyright © 2019 – Katana Cryptographic Ltd. All Rights Reserved. |
||||
|
*/ |
||||
|
'use strict' |
||||
|
|
||||
|
const bodyParser = require('body-parser') |
||||
|
const Logger = require('../lib/logger') |
||||
|
const errors = require('../lib/errors') |
||||
|
const walletService = require('../lib/wallet/wallet-service') |
||||
|
const authMgr = require('../lib/auth/authorizations-manager') |
||||
|
const HttpServer = require('../lib/http-server/http-server') |
||||
|
const apiHelper = require('./api-helper') |
||||
|
|
||||
|
const debugApi = !!(process.argv.indexOf('api-debug') > -1) |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* Wallet API endpoints |
||||
|
*/ |
||||
|
class WalletRestApi { |
||||
|
|
||||
|
/** |
||||
|
* Constructor |
||||
|
* @param {pushtx.HttpServer} httpServer - HTTP server |
||||
|
*/ |
||||
|
constructor(httpServer) { |
||||
|
this.httpServer = httpServer |
||||
|
|
||||
|
// Establish routes
|
||||
|
const urlencodedParser = bodyParser.urlencoded({ extended: true }) |
||||
|
|
||||
|
this.httpServer.app.get( |
||||
|
'/wallet', |
||||
|
authMgr.checkAuthentication.bind(authMgr), |
||||
|
apiHelper.validateEntitiesParams.bind(apiHelper), |
||||
|
this.getWallet.bind(this), |
||||
|
HttpServer.sendAuthError |
||||
|
) |
||||
|
|
||||
|
this.httpServer.app.post( |
||||
|
'/wallet', |
||||
|
urlencodedParser, |
||||
|
authMgr.checkAuthentication.bind(authMgr), |
||||
|
apiHelper.validateEntitiesParams.bind(apiHelper), |
||||
|
this.postWallet.bind(this), |
||||
|
HttpServer.sendAuthError |
||||
|
) |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Handle wallet GET request |
||||
|
* @param {object} req - http request object |
||||
|
* @param {object} res - http response object |
||||
|
*/ |
||||
|
async getWallet(req, res) { |
||||
|
try { |
||||
|
// Check request params
|
||||
|
if (!apiHelper.checkEntitiesParams(req.query)) |
||||
|
return HttpServer.sendError(res, errors.multiaddr.NOACT) |
||||
|
|
||||
|
// Parse params
|
||||
|
const entities = apiHelper.parseEntitiesParams(req.query) |
||||
|
|
||||
|
const result = await walletService.getFullWalletInfo( |
||||
|
entities.active, |
||||
|
entities.legacy, |
||||
|
entities.bip49, |
||||
|
entities.bip84, |
||||
|
entities.pubkey |
||||
|
) |
||||
|
|
||||
|
const ret = JSON.stringify(result, null, 2) |
||||
|
HttpServer.sendRawData(res, ret) |
||||
|
|
||||
|
} catch(e) { |
||||
|
HttpServer.sendError(res, e) |
||||
|
|
||||
|
} finally { |
||||
|
if (debugApi) { |
||||
|
const strParams = |
||||
|
`${req.query.active ? req.query.active : ''} \
|
||||
|
${req.query.new ? req.query.new : ''} \ |
||||
|
${req.query.pubkey ? req.query.pubkey : ''} \ |
||||
|
${req.query.bip49 ? req.query.bip49 : ''} \ |
||||
|
${req.query.bip84 ? req.query.bip84 : ''}` |
||||
|
|
||||
|
Logger.info(`API : Completed GET /wallet ${strParams}`) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Handle wallet POST request |
||||
|
* @param {object} req - http request object |
||||
|
* @param {object} res - http response object |
||||
|
*/ |
||||
|
async postWallet(req, res) { |
||||
|
try { |
||||
|
// Check request params
|
||||
|
if (!apiHelper.checkEntitiesParams(req.body)) |
||||
|
return HttpServer.sendError(res, errors.multiaddr.NOACT) |
||||
|
|
||||
|
// Parse params
|
||||
|
const entities = apiHelper.parseEntitiesParams(req.body) |
||||
|
|
||||
|
const result = await walletService.getFullWalletInfo( |
||||
|
entities.active, |
||||
|
entities.legacy, |
||||
|
entities.bip49, |
||||
|
entities.bip84, |
||||
|
entities.pubkey |
||||
|
) |
||||
|
|
||||
|
HttpServer.sendOkDataOnly(res, result) |
||||
|
|
||||
|
} catch(e) { |
||||
|
HttpServer.sendError(res, e) |
||||
|
|
||||
|
} finally { |
||||
|
if (debugApi) { |
||||
|
const strParams = |
||||
|
`${req.body.active ? req.body.active : ''} \
|
||||
|
${req.body.new ? req.body.new : ''} \ |
||||
|
${req.body.pubkey ? req.body.pubkey : ''} \ |
||||
|
${req.body.bip49 ? req.body.bip49 : ''} \ |
||||
|
${req.body.bip84 ? req.body.bip84 : ''}` |
||||
|
|
||||
|
Logger.info(`API : Completed POST /wallet ${strParams}`) |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
module.exports = WalletRestApi |
Loading…
Reference in new issue