diff --git a/controllers/users.js b/controllers/users.js index d07d744..2d16025 100644 --- a/controllers/users.js +++ b/controllers/users.js @@ -3,7 +3,7 @@ const { encode } = require('../utils'), encrypt = require('../services/encrypt'); let db = require('../services/storage'), - bus; + bus = require('../services/bus'); /** * Adds an user into the db and publishes the action to the bus diff --git a/index.js b/index.js index e55fc03..ca5e338 100644 --- a/index.js +++ b/index.js @@ -16,7 +16,7 @@ const _isEmpty = require('lodash/isEmpty'), { AUTH_LEVELS } = require('./constants'), { withAuthLevel } = require('./services/auth'), { setDb } = require('./services/storage'), - { setBus } = require('./controllers/users'); + { setBus } = require('./services/bus'); /** * determine if a route is protected diff --git a/package-lock.json b/package-lock.json index eec8090..2060ac7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "amphora-auth", - "version": "0.0.1-beta.4", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index dc37a6d..a91fc46 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "amphora-auth", - "version": "0.0.1-beta.4", + "version": "1.0.0", "description": "An auth adapter for Amphora", "main": "index.js", "scripts": { diff --git a/services/bus.js b/services/bus.js new file mode 100644 index 0000000..bb183f7 --- /dev/null +++ b/services/bus.js @@ -0,0 +1,15 @@ +'use strict'; + +let bus; // Redis bus passed from Amphora. Assigned value at initialization + +/** + * Publishes an event to the bus. + * @param {string} eventName + * @param {Object} data + */ +function publish(eventName, data) { + bus.publish(eventName, data); +} + +module.exports.publish = publish; +module.exports.setBus = redisBus => bus = redisBus; diff --git a/services/bus.test.js b/services/bus.test.js new file mode 100644 index 0000000..5ccc489 --- /dev/null +++ b/services/bus.test.js @@ -0,0 +1,22 @@ +'use strict'; + +const _startCase = require('lodash/startCase'), + filename = __filename.split('/').pop().split('.').shift(), + lib = require(`./${filename}`); + +describe(_startCase(filename), function () { + describe('publish', function () { + const fakeBus = { publish: jest.fn() }, + fn = lib[this.description]; + + lib.setBus(fakeBus); + + it('calls publish method from the bus service', () => { + fakeBus.publish.mockResolvedValue(); + + fn('save', {}); + + expect(fakeBus.publish).toBeCalledWith('save', {}); + }); + }); +}); diff --git a/utils.js b/utils.js index 2f0b669..1dbf9c8 100644 --- a/utils.js +++ b/utils.js @@ -13,7 +13,8 @@ const _get = require('lodash/get'), references = require('./services/references'), { isValidPassword } = require('./services/encrypt'); -let db = require('./services/storage'); +let db = require('./services/storage'), + bus = require('./services/bus'); /** * encode username and provider to base64 @@ -97,6 +98,10 @@ function verify(properties) { return done(null, false, { message: 'Invalid Password' }); } + data._ref = uid; + delete data.password; + + bus.publish('saveUser', { key: uid, value: data }); // Tell elastic about any update changes to maintain data consistency return done(null, data); }) .catch(e => done(e)); @@ -254,5 +259,6 @@ module.exports.getUri = getUri; // For testing purposes module.exports.setDb = mock => db = mock; +module.exports.setBus = mock => bus = mock; module.exports.removeQueryString = removeQueryString; module.exports.removeExtension = removeExtension; diff --git a/utils.test.js b/utils.test.js index 1b1f412..971913c 100644 --- a/utils.test.js +++ b/utils.test.js @@ -8,12 +8,16 @@ const _startCase = require('lodash/startCase'), storage = require('./test/fixtures/mocks/storage'); describe(_startCase(filename), function () { - let fakeDb; + let fakeDb, fakeBus; beforeEach(function () { fakeDb = storage(); + fakeBus = { + publish: jest.fn() + }; lib.setDb(fakeDb); + lib.setBus(fakeBus); }); describe('compileTemplate', function () {