Skip to content

Commit 439658f

Browse files
authored
Updated /users/:userId PATCH Endpoint (#2316)
* updated userId route for self patch request based on userid * removed console line * added feature flag * return res fix
1 parent 7269b1f commit 439658f

File tree

5 files changed

+474
-15
lines changed

5 files changed

+474
-15
lines changed

controllers/users.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ const config = require("config");
3636
const { generateUniqueUsername } = require("../services/users");
3737
const userService = require("../services/users");
3838
const discordDeveloperRoleId = config.get("discordDeveloperRoleId");
39+
const usersCollection = firestore.collection("users");
3940

4041
const verifyUser = async (req, res) => {
4142
const userId = req.userData.id;
@@ -714,6 +715,12 @@ const updateUser = async (req, res) => {
714715
const { id: profileDiffId, message } = req.body;
715716
const devFeatureFlag = req.query.dev === "true";
716717
let profileDiffData;
718+
719+
const userDoc = await usersCollection.doc(req.params.userId).get();
720+
if (!userDoc.exists) {
721+
return res.boom.notFound("The User doesn't exist.");
722+
}
723+
717724
if (devFeatureFlag) {
718725
profileDiffData = await profileDiffsQuery.fetchProfileDiffUnobfuscated(profileDiffId);
719726
} else {
@@ -1096,6 +1103,26 @@ const updateUsernames = async (req, res) => {
10961103
}
10971104
};
10981105

1106+
const updateProfile = async (req, res) => {
1107+
try {
1108+
const { id: currentUserId, roles = {} } = req.userData;
1109+
const isSelf = req.params.userId === currentUserId;
1110+
const isSuperUser = roles[ROLES.SUPERUSER];
1111+
const profile = req.query.profile === "true";
1112+
1113+
if (isSelf && profile && req.query.dev === "true") {
1114+
return await updateSelf(req, res);
1115+
} else if (isSuperUser) {
1116+
return await updateUser(req, res);
1117+
}
1118+
1119+
return res.boom.badRequest("Invalid Request.");
1120+
} catch (err) {
1121+
logger.error(`Error in updateUserStatusController: ${err}`);
1122+
return res.boom.badImplementation("An unexpected error occurred.");
1123+
}
1124+
};
1125+
10991126
module.exports = {
11001127
verifyUser,
11011128
generateChaincode,
@@ -1128,4 +1155,5 @@ module.exports = {
11281155
isDeveloper,
11291156
getIdentityStats,
11301157
updateUsernames,
1158+
updateProfile,
11311159
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const conditionalMiddleware = (validator) => {
2+
return async (req, res, next) => {
3+
if (req.params.userId === req.userData.id && req.query.profile === "true") {
4+
return validator(req, res, next);
5+
}
6+
next();
7+
};
8+
};
9+
10+
module.exports = conditionalMiddleware;

routes/users.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ const { Services } = require("../constants/bot");
1414
const authenticateProfile = require("../middlewares/authenticateProfile");
1515
const { devFlagMiddleware } = require("../middlewares/devFlag");
1616
const { userAuthorization } = require("../middlewares/userAuthorization");
17+
const conditionalMiddleware = require("../middlewares/conditionalMiddleware");
1718

1819
router.post("/", authorizeAndAuthenticate([ROLES.SUPERUSER], [Services.CRON_JOB_HANDLER]), users.markUnverified);
1920
router.post("/update-in-discord", authenticate, authorizeRoles([SUPERUSER]), users.setInDiscordScript);
2021
router.post("/verify", authenticate, users.verifyUser);
2122
router.get("/userId/:userId", users.getUserById);
22-
router.patch("/self", authenticate, userValidator.updateUser, users.updateSelf);
23+
router.patch("/self", authenticate, userValidator.updateUser, users.updateSelf); // this route is being deprecated soon, please use alternate available `/users/:userId?profile=true` PATCH endpoint.
2324
router.get("/", authenticateProfile(authenticate), userValidator.getUsers, users.getUsers);
2425
router.get("/self", authenticate, users.getSelfDetails);
2526
router.get("/isDeveloper", authenticate, users.isDeveloper);
@@ -75,7 +76,7 @@ router.patch(
7576
router.get("/picture/:id", authenticate, authorizeRoles([SUPERUSER]), users.getUserImageForVerification);
7677
router.patch("/profileURL", authenticate, userValidator.updateProfileURL, users.profileURL);
7778
router.patch("/rejectDiff", authenticate, authorizeRoles([SUPERUSER]), users.rejectProfileDiff);
78-
router.patch("/:userId", authenticate, authorizeRoles([SUPERUSER]), users.updateUser);
79+
router.patch("/:userId", authenticate, conditionalMiddleware(userValidator.updateUser), users.updateProfile);
7980
router.get("/suggestedUsers/:skillId", authenticate, authorizeRoles([SUPERUSER]), users.getSuggestedUsers);
8081
module.exports = router;
8182
router.post("/batch-username-update", authenticate, authorizeRoles([SUPERUSER]), users.updateUsernames);

0 commit comments

Comments
 (0)