diff --git a/accounts/support-rest-api.js b/accounts/support-rest-api.js index 38e9df9..5bd293d 100644 --- a/accounts/support-rest-api.js +++ b/accounts/support-rest-api.js @@ -69,6 +69,14 @@ class SupportRestApi { HttpServer.sendAuthError ) + this.httpServer.app.get( + `/${keys.prefixes.support}/xpub/:xpub/delete`, + authMgr.checkHasAdminProfile.bind(authMgr), + this.validateArgsGetXpubDelete.bind(this), + this.getXpubDelete.bind(this), + HttpServer.sendAuthError + ) + this.httpServer.app.get( `/${keys.prefixes.support}/pairing/explorer`, authMgr.checkHasAdminProfile.bind(authMgr), @@ -120,32 +128,9 @@ class SupportRestApi { */ _formatAddressInfoResult(info) { const res = info.toPojoExtended() - /*res._endpoints = [] - - if (info.tracked) { - res._endpoints.push({ - task: 'Rescan this address from remote sources', - url: `/${keys.prefixes.support}/address/${info.address}/rescan` - }) - } - - if (info.xpub != null) { - res._endpoints.push({ - task: 'Get information about the HD account that owns this address', - url: `/${keys.prefixes.support}/xpub/${info.xpub}/info` - }) - - res._endpoints.push({ - task: 'Rescan the whole HD account that owns this address', - url: `/${keys.prefixes.support}/xpub/${info.xpub}/rescan` - }) - }*/ - return JSON.stringify(res, null, 2) } - - /** * Rescan the blockchain for a given address * @param {object} req - http request object @@ -162,10 +147,6 @@ class SupportRestApi { const ret = { status: 'Rescan complete', - /*_endpoints: [{ - task: 'Get updated information about this address', - url: `/${keys.prefixes.support}/address/${address}/info` - }]*/ } await addrService.rescan(address) @@ -224,12 +205,6 @@ class SupportRestApi { */ _formatXpubInfoResult(info) { const res = info.toPojoExtended() - - /*res._endpoints = [{ - task: 'Rescan the whole HD account from remote sources', - url: `/${keys.prefixes.support}/xpub/${info.xpub}/rescan` - }]*/ - return JSON.stringify(res, null, 2) } @@ -249,10 +224,6 @@ class SupportRestApi { const ret = { status: 'Rescan complete', - /*_endpoints: [{ - task: 'Get updated information about this HD account', - url: `/${keys.prefixes.support}/xpub/${xpub}/info` - }]*/ } const gapLimit = req.query.gap != null ? parseInt(req.query.gap) : 0 @@ -283,6 +254,36 @@ class SupportRestApi { } } + /** + * Delete all data related to a hd account + * @param {object} req - http request object + * @param {object} res - http response object + */ + async getXpubDelete(req, res) { + try { + // Parse the entities passed as url params + const entities = apiHelper.parseEntities(req.params.xpub).xpubs + if (entities.length == 0) + return HttpServer.sendError(res, errors.xpub.INVALID) + + const xpub = entities[0] + + try { + await hdaService.deleteHdAccount(xpub) + HttpServer.sendOk(res) + } catch(e) { + HttpServer.sendError(res, e) + } + + } catch(e) { + HttpServer.sendError(res, errors.generic.GEN) + + } finally { + debugApi && Logger.info(`API : Completed GET /support/xpub/${req.params.xpub}/delete`) + } + } + + /** * Get pairing info */ @@ -366,6 +367,23 @@ class SupportRestApi { } } + /** + * Validate arguments related to GET xpub delete requests + * @param {object} req - http request object + * @param {object} res - http response object + * @param {function} next - next express middleware + */ + validateArgsGetXpubDelete(req, res, next) { + const isValidXpub = validator.isAlphanumeric(req.params.xpub) + + if (!isValidXpub) { + HttpServer.sendError(res, errors.body.INVDATA) + Logger.error(null, `API : SupportRestApi.validateArgsGetXpubDelete() : Invalid xpub ${req.params.xpub}`) + } else { + next() + } + } + /** * Validate arguments related to addresses requests * @param {object} req - http request object diff --git a/static/admin/css/style.css b/static/admin/css/style.css index 7ffc507..a1da6e6 100644 --- a/static/admin/css/style.css +++ b/static/admin/css/style.css @@ -534,6 +534,17 @@ button { display: inline-block; } +#xpubs-deletion-actions span { + display: inline; +} + +#xpubs-deletion-actions input { + width: 50px; + margin-left: 5px; + margin-right: 5px; + display: inline-block; +} + #xpubs-tool-details #xpub-value { overflow: hidden; } diff --git a/static/admin/dmt/xpubs-tools/xpubs-tools.html b/static/admin/dmt/xpubs-tools/xpubs-tools.html index 2eeb6b9..fd7017e 100644 --- a/static/admin/dmt/xpubs-tools/xpubs-tools.html +++ b/static/admin/dmt/xpubs-tools/xpubs-tools.html @@ -61,6 +61,7 @@