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

Commit 1cfc28b

Browse files
committed
profile hash: add on register, add on login if not there, update on pword reset
1 parent bed58e0 commit 1cfc28b

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

users.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ var moment = require('moment');
77
var pg = require('pg');
88
var crypto = require('crypto');
99

10+
var profileUtils = require('./lib/profile-utils');
11+
1012
module.exports = function (options) {
1113
var seneca = this;
1214
var plugin = 'cd-users';
@@ -30,6 +32,7 @@ module.exports = function (options) {
3032
seneca.add({role: plugin, cmd: 'load_champions_for_user'}, cmd_load_champions_for_user);
3133
seneca.add({role: plugin, cmd: 'load_dojo_admins_for_user'}, cmd_load_dojo_admins_for_user);
3234
seneca.add({role: plugin, cmd: 'record_login'}, cmd_record_login);
35+
seneca.add({role: plugin, cmd: 'update_profile_password'}, cmd_update_profile_password);
3336
seneca.add({role: 'user', cmd: 'login'}, cmd_login);
3437
seneca.add({role: 'user', cmd: 'cdf_login'}, cmd_cdf_login);
3538
seneca.add({role: plugin, cmd: 'load_prev_founder'}, cmd_load_prev_founder);
@@ -65,6 +68,13 @@ module.exports = function (options) {
6568
});
6669
}
6770

71+
function cmd_update_profile_password (args, done) {
72+
profileUtils.encodePassword(args.password).then((profileHash) => {
73+
const updatedUser = Object.assign({}, args.user, {profilePassword: profileHash});
74+
seneca.act({role: plugin, cmd: 'update'}, { id: args.user.id, user: updatedUser }, done);
75+
});
76+
}
77+
6878
function cmd_load (args, done) {
6979
var seneca = this;
7080
var id = args.id;
@@ -130,6 +140,13 @@ module.exports = function (options) {
130140
}
131141
};
132142

143+
function addProfilePassword (data, done) {
144+
profileUtils.encodePassword(user.password).then((profileHash) => {
145+
user.profilePassword = profileHash;
146+
done(null, data);
147+
});
148+
}
149+
133150
function verifyCaptcha (done) {
134151
request.post(postData, function (err, response, body) {
135152
if (err) {
@@ -221,6 +238,7 @@ module.exports = function (options) {
221238
async.waterfall([
222239
verifyCaptcha,
223240
checkPermissions,
241+
addProfilePassword,
224242
registerUser,
225243
sendWelcomeEmail
226244
], function (err, results) {
@@ -428,6 +446,8 @@ module.exports = function (options) {
428446
out.reset = reset;
429447
if (!out.ok) { return done(null, out); }
430448

449+
seneca.act({role: plugin, cmd: 'update_profile_password'}, {password: args.password, user: user});
450+
431451
reset.active = false;
432452
reset.save$(function (err, reset) {
433453
if (err) { return done(err); }
@@ -503,17 +523,28 @@ module.exports = function (options) {
503523
if (err) return done(err);
504524
if (!loginResponse.ok || !loginResponse.user) return done(null, loginResponse);
505525

506-
async.series([
526+
const handlers = [
507527
verifyPermissions,
508528
recordLogin
509-
], function (err) {
529+
];
530+
531+
if (!loginResponse.user.profilePassword) {
532+
handlers.push(updateProfilePassword);
533+
}
534+
535+
async.series(handlers, function (err) {
510536
if (err) {
511537
return done(err);
512538
}
513539

514540
return done(null, loginResponse);
515541
});
516542

543+
function updateProfilePassword (next) {
544+
seneca.act({role: plugin, cmd: 'update_profile_password'}, {password: args.password, user: loginResponse.user});
545+
next();
546+
}
547+
517548
function verifyPermissions (next) {
518549
var userRole;
519550

0 commit comments

Comments
 (0)