Skip to content
This repository was archived by the owner on Dec 14, 2023. It is now read-only.

Commit 3df1de8

Browse files
authored
Upgrade seneca && plugins to avoid non-terminated login token (#195)
* Upgrade seneca && plugins to avoid non-terminated login token * Cleanup some mess
1 parent 95e0741 commit 3df1de8

File tree

6 files changed

+45
-19
lines changed

6 files changed

+45
-19
lines changed

config/config.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ module.exports = function () {
2828
'postgresql-store': pgConfig(),
2929
'email-notifications': {
3030
sendemail: true,
31-
sendFrom: 'The CoderDojo Team <[email protected]>',
32-
email: {
33-
}
31+
sendFrom: 'The CoderDojo Team <[email protected]>'
3432
},
3533
mailtrap: {
3634
folder: path.resolve(__dirname + '/../email-templates'),

email-notifications.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ module.exports = function (options) {
2323
var subject = args.subject;
2424
var subjectVariables = args.subjectVariables || [];
2525
var subjectTranslation;
26-
if (options.sendemail && options.email) {
26+
if (options.sendemail) {
2727
var emailCode = args.code + args.locality;
2828
if (!fs.existsSync(path.join(__dirname, '/email-templates/', emailCode))) emailCode = args.code + 'en_US';
2929
if (!args.to) return done(null, {ok: false, why: 'No recipient set.'});

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,14 @@
4141
"po2json": "0.4.2",
4242
"postgrator": "2.2.0",
4343
"request": "2.58.0",
44-
"seneca": "0.7.2",
45-
"seneca-auth": "0.2.10",
44+
"seneca": "1.4",
45+
"seneca-auth": "1.0",
4646
"seneca-mail": "0.2.1",
4747
"seneca-postgresql-store": "1.1.3",
48-
"seneca-user": "0.2.10",
4948
"cp-permissions-plugin": "git://github.com/CoderDojo/cp-permissions-plugin#0.0.1",
49+
"seneca-user": "1.0",
5050
"shortid": "2.2.2",
51+
"util": "^0.10.3",
5152
"xoauth2": "1.1.0"
5253
},
5354
"devDependencies": {
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
DO $$
2+
BEGIN
3+
BEGIN
4+
ALTER TABLE sys_reset ADD COLUMN token character varying;
5+
EXCEPTION
6+
WHEN duplicate_column THEN RAISE NOTICE 'column token already exists in sys_reset.';
7+
END;
8+
END;
9+
$$

service.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ if (process.env.NEW_RELIC_ENABLED === 'true') require('newrelic');
55
var config = require('./config/config.js')();
66
var seneca = require('seneca')(config);
77
var store = require('seneca-postgresql-store');
8+
var util = require('util');
89

910
seneca.log.info('using config', JSON.stringify(config, null, 4));
1011

@@ -40,6 +41,19 @@ require('./migrate-psql-db.js')(function (err) {
4041
config: __dirname + '/config/permissions'
4142
});
4243

44+
process.on('SIGINT', shutdown);
45+
process.on('SIGTERM', shutdown);
46+
process.on('uncaughtException', shutdown);
47+
48+
function shutdown (err) {
49+
if (err !== void 0 && err.stack !== void 0) {
50+
console.error(new Date().toString() + ' FATAL: UncaughtException, please report: ' + util.inspect(err));
51+
console.error(util.inspect(err.stack));
52+
console.trace();
53+
}
54+
process.exit(0);
55+
}
56+
4357
seneca.listen()
4458
.client({ type: 'web', port: 10304, pin: { role: 'cd-salesforce', cmd: '*' } })
4559
.client({ type: 'web', port: 10301, pin: 'role:cd-dojos,cmd:*' });

users.js

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ module.exports = function (options) {
1313
var so = seneca.options();
1414
var protocol = process.env.PROTOCOL || 'http';
1515

16-
seneca.add({role: 'auth', cmd: 'create_reset'}, cmd_create_reset);
16+
seneca.add({role: plugin, cmd: 'create_reset'}, cmd_create_reset);
1717
seneca.add({role: plugin, cmd: 'load'}, cmd_load);
1818
seneca.add({role: plugin, cmd: 'list'}, cmd_list);
1919
seneca.add({role: plugin, cmd: 'register'}, cmd_register);
@@ -321,15 +321,18 @@ module.exports = function (options) {
321321

322322
function cmd_reset_password (args, done) {
323323
var seneca = this;
324-
seneca.act({role: 'auth', cmd: 'create_reset'}, args, function (err, response) {
325-
if (err) return done(err);
326-
return done(null, response);
327-
});
324+
if (!_.isEmpty(args.email) || !_.isEmpty(args.nick) || !_.isEmpty(args.username)) {
325+
seneca.act({role: plugin, cmd: 'create_reset'}, args, function (err, response) {
326+
if (err) return done(err);
327+
return done(null, response);
328+
});
329+
} else {
330+
return done(null, {ok: false, err: 'Missing parameters'});
331+
}
328332
}
329333

330334
function cmd_create_reset (args, done) {
331335
var seneca = this;
332-
var useract = seneca.pin({role: 'user', cmd: '*'});
333336

334337
var nick = args.nick || args.username;
335338
var email = args.email;
@@ -338,19 +341,21 @@ module.exports = function (options) {
338341
var emailSubject = args.emailSubject;
339342
var zenHostname = process.env.HOSTNAME || '127.0.0.1:8000';
340343

341-
args = {};
342-
if (void 0 !== nick) args.nick = nick;
343-
if (void 0 !== email) args.email = email;
344+
var msg = {role: 'user', cmd: 'create_reset'};
345+
if (void 0 !== nick) msg.nick = nick;
346+
if (void 0 !== email) msg.email = email;
344347

345-
useract.create_reset(args, function (err, out) {
348+
seneca.act(msg, function (err, out) {
346349
if (err || !out.ok) return done(err, out);
347350
if (options['email-notifications'].sendemail) {
348351
seneca.act({role: 'email-notifications', cmd: 'send'},
349352
{code: emailCode,
350353
locality: locality,
351354
to: out.user.email,
352355
subject: emailSubject,
353-
content: {name: out.user.name, resetlink: protocol + '://' + zenHostname + '/reset_password/' + out.reset.id, year: moment(new Date()).format('YYYY')}
356+
content: {name: out.user.name,
357+
resetlink: protocol + '://' + zenHostname + '/reset_password/' + out.reset.id,
358+
year: moment(new Date()).format('YYYY')}
354359
}, function (err, response) {
355360
if (err) return done(err);
356361
return done(null, { ok: out.ok });
@@ -467,7 +472,6 @@ module.exports = function (options) {
467472
function cmd_login (args, done) {
468473
this.prior(args, function (err, loginResponse) {
469474
if (err) return done(err);
470-
471475
if (!loginResponse.ok || !loginResponse.user) return done(null, loginResponse);
472476

473477
async.series([

0 commit comments

Comments
 (0)