Skip to content

Commit affaf2e

Browse files
authored
Complete new user propagation (#1940)
#1939 #1938 #1937 #1446 #1470 ... #944 NOTE(s): * Camelcaps not adhered to on some... may revisit. * `userrole` isn't consistent with `roleName` however is consistent with other objects... may revisit. * May not be the most efficient with `parseUser` but other option is to pull in `userRoles.json` and enumerate grab... may revisit. * Will have to boot everyone off temporarily to propagate values to sessions. Auto-merge
1 parent 2dca71f commit affaf2e

3 files changed

Lines changed: 34 additions & 4 deletions

File tree

controllers/auth.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ var addSession = require('../libs/modifySessions').add;
3030
var expandSession = require('../libs/modifySessions').expand;
3131
var statusCodePage = require('../libs/templateHelpers').statusCodePage;
3232

33+
var modelParser = require('../libs/modelParser');
34+
3335
//--- Configuration inclusions
3436
var allStrategies = require('./strategies.json');
3537

@@ -69,6 +71,7 @@ exports.preauth = function (aReq, aRes, aNext) {
6971
var authedUser = aReq.session.user;
7072

7173
var username = aReq.body.username;
74+
var userauth = aReq.body.auth;
7275
var SITEKEY = process.env.HCAPTCHA_SITE_KEY;
7376

7477
if (!authedUser) {
@@ -93,18 +96,29 @@ exports.preauth = function (aReq, aRes, aNext) {
9396

9497
User.findOne({ name: { $regex: new RegExp('^' + username + '$', 'i') } },
9598
function (aErr, aUser) {
99+
var user = null;
100+
96101
if (aErr) {
97102
console.error('Authfail with no User found of', username, aErr);
98103
aRes.redirect('/login?usernamefail');
99104
return;
100105
}
101106

102107
if (aUser) {
108+
user = modelParser.parseUser(aUser);
109+
103110
// Ensure that casing is identical so we still have it, correctly, when they
104111
// get back from authentication
105-
aReq.body.username = aUser.name;
112+
aReq.body.username = user.name;
113+
114+
if (userauth) {
115+
aReq.body.userauth = userauth;
116+
} else {
117+
aReq.body.userauth = user.userStrategies[user.userStrategies.length - 1];
118+
}
119+
aReq.userrole = user.roleName;
106120

107-
if (!aUser._probationary) {
121+
if (!user._probationary) {
108122
// Skip captcha for well known individual
109123
aReq.wellKnownUser = true;
110124

@@ -122,6 +136,7 @@ exports.preauth = function (aReq, aRes, aNext) {
122136
// Match cleansed name and this is the casing they have chosen
123137
aReq.body.username = username;
124138

139+
aReq.body.userauth = userauth;
125140
aReq.newUser = true;
126141

127142
// Validate captcha for unknown individual
@@ -209,8 +224,11 @@ exports.auth = function (aReq, aRes, aNext) {
209224
}
210225

211226
// Save the known statuses of the user on the session and remove
227+
aReq.session.userauth = aReq.body.userauth;
228+
aReq.session.userrole = aReq.userrole;
212229
aReq.session.wellKnownUser = aReq.wellKnownUser;
213230
aReq.session.newUser = aReq.newUser;
231+
delete aReq.userrole;
214232
delete aReq.wellKnownUser;
215233
delete aReq.newUser;
216234

@@ -317,8 +335,8 @@ exports.auth = function (aReq, aRes, aNext) {
317335
exports.callback = function (aReq, aRes, aNext) {
318336
var strategy = aReq.params.strategy;
319337
var username = aReq.session.username;
320-
var newstrategy = aReq.session.newstrategy;
321338
var wellKnownUser = aReq.session.wellKnownUser;
339+
var newstrategy = aReq.session.newstrategy;
322340
var captchaToken = aReq.session.captchaToken;
323341
var captchaSuccess = aReq.session.captchaSuccess;
324342

libs/modifySessions.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,9 +331,21 @@ exports.findSessionData = function (aQuery, aStore, aOptions, aCallback) {
331331

332332

333333
data.passport.oujsOptions.username = data.username || findMeta(data.user, 'name');
334+
data.passport.oujsOptions.userrole = data.passport.oujsOptions.username
335+
? data.userrole
336+
: '\u2026';
334337
data.passport.oujsOptions.newUser = data.newUser;
335338
data.passport.oujsOptions.sid = aSessionData._id;
336339

340+
// NOTE: These only shows up during authentication otherwise don't use
341+
if (data.userauth) {
342+
data.passport.oujsOptions.strategy = data.userauth;
343+
}
344+
345+
if (data.useragent) {
346+
data.passport.oujsOptions.userAgent = data.useragent;
347+
}
348+
337349
// Very simple query filter search check to start.
338350
// Currently only looking in `data.passport.oujsOptions.username`.
339351
if (aQuery && aQuery.username) {

views/includes/session.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<span>
1212
{{#user.userPageUrl}}<a href="{{{user.userPageUrl}}}" class="username">{{name}}</a>{{/user.userPageUrl}}
1313
{{^user.userPageUrl}}<span class="username">{{#passport.oujsOptions.newUser}}<em>{{/passport.oujsOptions.newUser}}{{#name}}{{name}}{{/name}}{{#passport.oujsOptions.newUser}}</em>{{/passport.oujsOptions.newUser}}{{^name}}<em>&hellip;</em>{{/name}}</span>{{/user.userPageUrl}}
14-
<span class="label label-default">{{#user.roleName}}{{user.roleName}}{{/user.roleName}}{{^user.roleName}}<em>&hellip;</em>{{/user.roleName}}</span>
14+
<span class="label label-default">{{#user.roleName}}{{user.roleName}}{{/user.roleName}}{{^user.roleName}}{{#passport.oujsOptions.userrole}}{{passport.oujsOptions.userrole}}{{/passport.oujsOptions.userrole}}{{^passport.oujsOptions.userrole}}<em>User</em>{{/passport.oujsOptions.userrole}}{{/user.roleName}}</span>
1515
<span class="label label-{{#cookie.secure}}success{{/cookie.secure}}{{^cookie.secure}}warning{{/cookie.secure}}" title="secure">
1616
<i class="fa fa-{{^cookie.secure}}un{{/cookie.secure}}lock"></i>
1717
</span>

0 commit comments

Comments
 (0)