Skip to content

Commit 30e630f

Browse files
mailmesriza98Sen, Sriza
andauthored
Refactor controller functions to use service layer for retrieving user data (/users/userId/:userId) route (/users/self) route (#1249)
* removal of sensitive info(phone,email,tokens,chaincode) on /users route * update in removal of sensitive info(phone,email,tokens,chaincode) on /users route * Update dataAccessLayer.js * updated query id and qualifiers params in /users in removal of sensitive info(phone,email,tokens,chaincode) on /users route * updated dataAccessLayer for lint issues * Update users.js * updated delete statement to hasOwnProperty * updated default arguments to function removeSensitiveInfo * made updates in the dataAccessLayer * Update users.js * typo fixes * Added unit tests * updated to using in operator * updated to query as argument in place of req * updates to /user/userId * added code changes for /self route * remove extra lines * Update users.js * removed commented lines * lint error fix * Update users.js --------- Co-authored-by: Sen, Sriza <[email protected]>
1 parent eec7bf0 commit 30e630f

File tree

5 files changed

+38
-21
lines changed

5 files changed

+38
-21
lines changed

controllers/users.js

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const { profileDiffStatus } = require("../constants/profileDiff");
77
const { logType } = require("../constants/logs");
88
const dataAccess = require("../services/dataAccessLayer");
99
const logger = require("../utils/logger");
10-
const obfuscate = require("../utils/obfuscate");
1110
const { SOMETHING_WENT_WRONG, INTERNAL_SERVER_ERROR } = require("../constants/errorMessages");
1211
const { getPaginationLink, getUsernamesFromPRs, getRoleToUpdate } = require("../utils/users");
1312
const { setInDiscordFalseScript } = require("../services/discordService");
@@ -39,9 +38,10 @@ const verifyUser = async (req, res) => {
3938
};
4039

4140
const getUserById = async (req, res) => {
42-
let result;
41+
let result, user;
4342
try {
44-
result = await userQuery.fetchUser({ userId: req.params.userId });
43+
result = await dataAccess.retrieveUsers({ id: req.params.userId });
44+
user = result.user;
4545
} catch (error) {
4646
logger.error(`Error while fetching user: ${error}`);
4747
return res.boom.serverUnavailable(SOMETHING_WENT_WRONG);
@@ -51,15 +51,6 @@ const getUserById = async (req, res) => {
5151
return res.boom.notFound("User doesn't exist");
5252
}
5353

54-
const { phone = "", email = "", ...user } = result.user;
55-
try {
56-
user.phone = obfuscate.obfuscatePhone(phone);
57-
user.email = obfuscate.obfuscateMail(email);
58-
} catch (error) {
59-
logger.error(`Error while formatting phone and email: ${error}`);
60-
return res.boom.badImplementation("Error while formatting phone and email");
61-
}
62-
6354
return res.json({
6455
message: "User returned successfully!",
6556
user,
@@ -82,17 +73,17 @@ const getUsers = async (req, res) => {
8273
// getting user details by id if present.
8374
if (req.query.id) {
8475
const id = req.query.id;
85-
let result;
76+
let result, user;
8677
try {
8778
result = await dataAccess.retrieveUsers({ id: id });
79+
user = result.user;
8880
} catch (error) {
8981
logger.error(`Error while fetching user: ${error}`);
9082
return res.boom.serverUnavailable(SOMETHING_WENT_WRONG);
9183
}
9284
if (!result.userExists) {
9385
return res.boom.notFound("User doesn't exist");
9486
}
95-
const user = result.user;
9687
return res.json({
9788
message: "User returned successfully!",
9889
user,
@@ -212,14 +203,14 @@ const getUsernameAvailabilty = async (req, res) => {
212203
* @param res {Object} - Express response object
213204
*/
214205

215-
const getSelfDetails = (req, res) => {
206+
const getSelfDetails = async (req, res) => {
216207
try {
217208
if (req.userData) {
218209
if (req.query.private) {
219210
return res.send(req.userData);
220211
}
221-
const { phone, email, ...userData } = req.userData;
222-
return res.send(userData);
212+
const user = await dataAccess.retrieveUsers({ userdata: req.userData });
213+
return res.send(user);
223214
}
224215
return res.boom.notFound("User doesn't exist");
225216
} catch (error) {
@@ -563,8 +554,8 @@ const filterUsers = async (req, res) => {
563554
if (!Object.keys(req.query).length) {
564555
return res.boom.badRequest("filter for item not provided");
565556
}
566-
const users = await dataAccess.retreiveFilteredUsers(req.query);
567557

558+
const users = await dataAccess.retreiveFilteredUsers(req.query);
568559
return res.json({
569560
message: users.length ? "Users found successfully!" : "No users found",
570561
users: users,

services/dataAccessLayer.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const userQuery = require("../models/users");
22
const { USER_SENSITIVE_DATA } = require("../constants/users");
33

4-
const retrieveUsers = async ({ id = null, username = null, usernames = null, query = null }) => {
4+
const retrieveUsers = async ({ id = null, username = null, usernames = null, query = null, userdata }) => {
55
if (id || username) {
66
let result;
77
if (id != null) {
@@ -17,12 +17,15 @@ const retrieveUsers = async ({ id = null, username = null, usernames = null, que
1717
removeSensitiveInfo(element);
1818
});
1919
return users;
20-
} else {
20+
} else if (query) {
2121
const { allUsers, nextId, prevId } = await userQuery.fetchPaginatedUsers(query);
2222
allUsers.forEach((element) => {
2323
removeSensitiveInfo(element);
2424
});
2525
return { allUsers, nextId, prevId };
26+
} else {
27+
removeSensitiveInfo(userdata);
28+
return userdata;
2629
}
2730
};
2831

test/fixtures/user/removalData.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = () => {
2+
return ["phone", "emails", "tokens", "chaincode"];
3+
};

test/integration/users.test.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,10 @@ describe("Users", function () {
175175
userData.forEach((user) => {
176176
expect(user.roles.archived).to.equal(false);
177177
});
178+
expect(res.body.users[0]).to.not.have.property("phone");
179+
expect(res.body.users[0]).to.not.have.property("email");
180+
expect(res.body.users[0]).to.not.have.property("tokens");
181+
expect(res.body.users[0]).to.not.have.property("chaincode");
178182
return done();
179183
});
180184
});
@@ -410,7 +414,8 @@ describe("Users", function () {
410414
expect(res.body).to.be.a("object");
411415
expect(res.body).to.not.have.property("phone");
412416
expect(res.body).to.not.have.property("email");
413-
417+
expect(res.body).to.not.have.property("tokens");
418+
expect(res.body).to.not.have.property("chaincode");
414419
return done();
415420
});
416421
});
@@ -513,6 +518,11 @@ describe("Users", function () {
513518
expect(res.body).to.be.a("object");
514519
expect(res.body.message).to.equal("User returned successfully!");
515520
expect(res.body.user).to.be.a("object");
521+
expect(res.body.user).to.not.have.property("phone");
522+
expect(res.body.user).to.not.have.property("email");
523+
expect(res.body.user).to.not.have.property("tokens");
524+
expect(res.body.user).to.not.have.property("chaincode");
525+
516526
return done();
517527
});
518528
});

test/unit/services/dataAccessLayer.test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const sinon = require("sinon");
66
const { retrieveUsers, removeSensitiveInfo, retreiveFilteredUsers } = require("../../../services/dataAccessLayer");
77
const userData = require("../../fixtures/user/user")();
88
const { USER_SENSITIVE_DATA } = require("../../../constants/users");
9+
910
chai.use(chaiHttp);
1011
const expect = chai.expect;
1112
let fetchUserStub;
@@ -58,6 +59,15 @@ describe("Data Access Layer", function () {
5859
});
5960
});
6061
});
62+
63+
it("should return /users/self data and remove sensitive info", async function () {
64+
const userdata = userData[12];
65+
await retrieveUsers({ userdata });
66+
removeSensitiveInfo(userData[12]);
67+
USER_SENSITIVE_DATA.forEach((key) => {
68+
expect(userData[12]).to.not.have.property(key);
69+
});
70+
});
6171
});
6272

6373
describe("retrieveFilteredUsers", function () {

0 commit comments

Comments
 (0)