Skip to content

Commit 5777be3

Browse files
committed
Consistent user data returned from API
There's duplication in the user and session endpoints that all return the same shaped user model data. The new helper should keep them consistent when new properties need to be exposed.
1 parent 8c577a4 commit 5777be3

File tree

2 files changed

+19
-43
lines changed

2 files changed

+19
-43
lines changed

server/controllers/session.controller.js

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import passport from 'passport';
22

3+
import { userResponse } from './user.controller';
4+
35
export function createSession(req, res, next) {
46
passport.authenticate('local', (err, user) => { // eslint-disable-line consistent-return
57
if (err) { return next(err); }
@@ -9,28 +11,14 @@ export function createSession(req, res, next) {
911

1012
req.logIn(user, (innerErr) => {
1113
if (innerErr) { return next(innerErr); }
12-
return res.json({
13-
email: req.user.email,
14-
username: req.user.username,
15-
preferences: req.user.preferences,
16-
apiKeys: req.user.apiKeys,
17-
verified: req.user.verified,
18-
id: req.user._id
19-
});
14+
return res.json(userResponse(req.user));
2015
});
2116
})(req, res, next);
2217
}
2318

2419
export function getSession(req, res) {
2520
if (req.user) {
26-
return res.json({
27-
email: req.user.email,
28-
username: req.user.username,
29-
preferences: req.user.preferences,
30-
apiKeys: req.user.apiKeys,
31-
verified: req.user.verified,
32-
id: req.user._id
33-
});
21+
return res.json(userResponse(req.user));
3422
}
3523
return res.status(404).send({ message: 'Session does not exist' });
3624
}

server/controllers/user.controller.js

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ import {
1010

1111
export * from './user.controller/apiKey';
1212

13+
export function userResponse(user) {
14+
return {
15+
email: user.email,
16+
username: user.username,
17+
preferences: user.preferences,
18+
apiKeys: user.apiKeys,
19+
verified: user.verified,
20+
id: user._id
21+
};
22+
}
23+
1324
const random = (done) => {
1425
crypto.randomBytes(20, (err, buf) => {
1526
const token = buf.toString('hex');
@@ -78,13 +89,7 @@ export function createUser(req, res, next) {
7889
});
7990

8091
mail.send(mailOptions, (mailErr, result) => { // eslint-disable-line no-unused-vars
81-
res.json({
82-
email: req.user.email,
83-
username: req.user.username,
84-
preferences: req.user.preferences,
85-
verified: req.user.verified,
86-
id: req.user._id
87-
});
92+
res.json(userResponse(req.user));
8893
});
8994
});
9095
});
@@ -224,13 +229,7 @@ export function emailVerificationInitiate(req, res) {
224229
user.verifiedTokenExpires = EMAIL_VERIFY_TOKEN_EXPIRY_TIME; // 24 hours
225230
user.save();
226231

227-
res.json({
228-
email: req.user.email,
229-
username: req.user.username,
230-
preferences: req.user.preferences,
231-
verified: user.verified,
232-
id: req.user._id
233-
});
232+
res.json(userResponse(req.user));
234233
}
235234
});
236235
});
@@ -269,12 +268,7 @@ export function updatePassword(req, res) {
269268
user.resetPasswordExpires = undefined;
270269

271270
user.save((saveErr) => {
272-
req.logIn(user, loginErr => res.json({
273-
email: req.user.email,
274-
username: req.user.username,
275-
preferences: req.user.preferences,
276-
id: req.user._id
277-
}));
271+
req.logIn(user, loginErr => res.json(userResponse(req.user)));
278272
});
279273
});
280274

@@ -294,13 +288,7 @@ export function saveUser(res, user) {
294288
return;
295289
}
296290

297-
res.json({
298-
email: user.email,
299-
username: user.username,
300-
preferences: user.preferences,
301-
verified: user.verified,
302-
id: user._id
303-
});
291+
res.json(userResponse(user));
304292
});
305293
}
306294

0 commit comments

Comments
 (0)