diff --git a/apps/alias-server/README.md b/apps/alias-server/README.md --- a/apps/alias-server/README.md +++ b/apps/alias-server/README.md @@ -14,6 +14,29 @@ [{"alias":"1","address":"ecash:qpmytrdsakt0axrrlswvaj069nat3p9s7cjctmjasj"},{"alias":"333","address":"ecash:qpmytrdsakt0axrrlswvaj069nat3p9s7cjctmjasj"}] ``` +`/alias/` + +e.g. for a registered alias, `localhost:5000/alias/thisalias` + +``` +{ + address: '
', + alias: 'thisalias', + blockheight: , + txid: '', + isRegistered: true +} +``` + +e.g. for an unregistered alias, `localhost:5000/alias/unregisteredalias` + +``` +{ + alias: 'unregisteredalias', + isRegistered: false +} +``` + ## Requirements You will need a local instance of MongoDB. See installation instructions [here](https://www.mongodb.com/docs/manual/tutorial/install-mongodb-on-ubuntu/). diff --git a/apps/alias-server/src/app.js b/apps/alias-server/src/app.js --- a/apps/alias-server/src/app.js +++ b/apps/alias-server/src/app.js @@ -6,6 +6,7 @@ const express = require('express'); var cors = require('cors'); const requestIp = require('request-ip'); +const { getAliasInfoFromAlias } = require('./db'); module.exports = { startServer: function (db, port) { @@ -37,6 +38,38 @@ } }); + app.get('/alias/:alias', async function (req, res) { + // Get the requested alias + const alias = req.params.alias; + + // Log the request + console.log( + `/alias/${alias} from IP: ${req.clientIp}, host ${req.headers.host}`, + ); + + // Lookup the alias + let response; + try { + response = await getAliasInfoFromAlias(db, alias); + // Custom msg if alias has not yet been registered + if (response === null) { + response = { alias, isRegistered: false }; + } else { + response.isRegistered = true; + } + + // Return successful response + return res.status(200).json(response); + } catch (err) { + // Return error response + res.status(500).json({ + error: `Error fetching /alias/${alias}${ + err && err.message ? `: ${err.message}` : '' + }`, + }); + } + }); + return app.listen(port); }, }; diff --git a/apps/alias-server/test/app.test.js b/apps/alias-server/test/app.test.js --- a/apps/alias-server/test/app.test.js +++ b/apps/alias-server/test/app.test.js @@ -5,7 +5,7 @@ const request = require('supertest'); const { startServer } = require('../src/app'); -const { initializeDb, addAliasesToDb } = require('../src/db'); +const { initializeDb, addOneAliasToDb, addAliasesToDb } = require('../src/db'); // Mock mongodb const { MongoClient } = require('mongodb'); const { MongoMemoryServer } = require('mongodb-memory-server'); @@ -66,4 +66,36 @@ .expect('Content-Type', /json/) .expect(generated.validAliasRegistrations); }); + it('/alias/ returns object with isRegistered:false for an alias not in the database', async function () { + const testedAlias = 'test'; + return request(app) + .get(`/alias/${testedAlias}`) + .expect(200) + .expect('Content-Type', /json/) + .expect({ alias: testedAlias, isRegistered: false }); + }); + it('/alias/ returns object with isRegistered:true for an alias in the database', async function () { + // newValidAliases needs to be a clone of the mock because + // each object gets an _id field when added to the database + const newValidAliases = JSON.parse( + JSON.stringify(generated.validAliasRegistrations), + ); + await addOneAliasToDb(testDb, newValidAliases[0]); + const { alias, address, blockheight, txid } = newValidAliases[0]; + return request(app) + .get(`/alias/${alias}`) + .expect(200) + .expect('Content-Type', /json/) + .expect({ alias, address, blockheight, txid, isRegistered: true }); + }); + it('/alias/ returns an error on database error', function () { + const testAlias = 'test'; + return request(dbErrorApp) + .get(`/alias/${testAlias}`) + .expect(500) + .expect('Content-Type', /json/) + .expect({ + error: `Error fetching /alias/test: Error finding alias "${testAlias}" in database`, + }); + }); });