fix(events): require events to be configured in production

While abrupt, forgetting to delete user information is a big deal, so
this will prevent the server from running as long as the event queue is
not setup.

BREAKING CHANGE: Server will fail to start up if `config.events` is not
  set with values when in production.
This commit is contained in:
Sean McArthur 2015-07-23 12:46:14 -07:00
Родитель 2b0582fbd2
Коммит 1bef9e0aa2
5 изменённых файлов: 24 добавлений и 4 удалений

Просмотреть файл

@ -208,5 +208,4 @@ var options = {
conf.validate(options);
module.exports = conf;

10
lib/env.js Normal file
Просмотреть файл

@ -0,0 +1,10 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
const config = require('./config');
exports.isProdLike = function isProdLike() {
var env = config.get('env');
return env === 'prod' || env === 'stage';
};

Просмотреть файл

@ -4,6 +4,7 @@
const config = require('./config').root();
const db = require('./db');
const env = require('./env');
const logger = require('./logging')('events');
const Sink = require('fxa-notifier-aws').Sink;
const HEX_STRING = require('./validators').HEX_STRING;
@ -12,12 +13,19 @@ var fxaEvents;
if (!config.events.region || !config.events.queueUrl) {
fxaEvents = {
start: function () { logger.warn('accountEvent.unconfigured'); }
start: function start() {
if (env.isProdLike()) {
throw new Error('config.events must be included in prod');
} else {
logger.warn('accountEvent.unconfigured');
}
}
};
} else {
fxaEvents = new Sink(config.events.region, config.events.queueUrl);
fxaEvents.on('data', function (message) {
logger.verbose('data', message);
if (message.event === 'delete') {
var userId = message.uid.split('@')[0];
if (!HEX_STRING.test(userId)) {
@ -26,6 +34,7 @@ if (!config.events.region || !config.events.queueUrl) {
}
db.removeUser(userId)
.done(function () {
logger.info('delete', { uid: userId });
message.del();
},
function (err) {

Просмотреть файл

@ -6,6 +6,7 @@ const Hapi = require('hapi');
const AppError = require('../error');
const config = require('../config').root();
const env = require('../env');
const logger = require('../logging')('server');
const hapiLogger = require('../logging')('server.hapi');
const summary = require('../logging/summary');
@ -18,7 +19,7 @@ exports.create = function createServer() {
logger.warn('localRedirect',
'*** localRedirects is set to TRUE. Should only be used for developers.');
}
var isProd = config.env === 'prod';
var isProd = env.isProdLike();
var server = Hapi.createServer(
config.server.host,
config.server.port,

Просмотреть файл

@ -7,12 +7,13 @@ const Hapi = require('hapi');
const AppError = require('../error');
const auth = require('../auth');
const config = require('../config').root();
const env = require('../env');
const logger = require('../logging')('server.clients');
const hapiLogger = require('../logging')('server.hapi');
const summary = require('../logging/summary');
exports.create = function createServer() {
var isProd = config.env === 'prod';
var isProd = env.isProdLike();
var server = Hapi.createServer(
config.serverInternal.host,
config.serverInternal.port,