Skip to content

Commit 39bc7c0

Browse files
authored
Merge pull request #1353 from Real-Dev-Squad/feat/staging-roles
add option to set privilaged roles in staging backend
2 parents a807c17 + b4388c3 commit 39bc7c0

File tree

4 files changed

+77
-1
lines changed

4 files changed

+77
-1
lines changed

controllers/staging.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
const { addOrUpdate } = require("../models/users");
2+
3+
const updateRoles = async (req, res) => {
4+
try {
5+
const userData = await req.userData;
6+
if (process.env.NODE_ENV !== "production") {
7+
return res.status(403).json({
8+
message: "FORBIDDEN | To be used only in staging and development",
9+
});
10+
}
11+
const userId = req.userData.id;
12+
if (req.body.super_user) {
13+
await addOrUpdate(
14+
{
15+
roles: {
16+
...userData.roles,
17+
super_user: req.body.super_user,
18+
},
19+
},
20+
userId
21+
);
22+
} else if (req.body.member) {
23+
await addOrUpdate(
24+
{
25+
roles: {
26+
...userData.roles,
27+
member: req.body.member,
28+
},
29+
},
30+
userId
31+
);
32+
}
33+
return res.status(200).json({
34+
message: "Roles Updated successfully",
35+
});
36+
} catch (err) {
37+
logger.error(`Oops an error occured: ${err}`);
38+
return res.status(500).json({
39+
message: "Oops an internal error occured",
40+
});
41+
}
42+
};
43+
44+
module.exports = {
45+
updateRoles,
46+
};

middlewares/validators/staging.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const joi = require("joi");
2+
3+
const validateUserRoles = async (req, res, next) => {
4+
const config = {
5+
super_user: joi.boolean().optional(),
6+
member: joi.boolean().optional(),
7+
};
8+
const schema = joi.object(config).xor("super_user", "member");
9+
10+
try {
11+
await schema.validateAsync(req.body);
12+
next();
13+
} catch (err) {
14+
logger.error(`Error validating validateUserRoles payload : ${err}`);
15+
res.boom.badRequest(JSON.stringify({ allowedParameters: { super_user: "boolean", member: "boolean" } }));
16+
}
17+
};
18+
19+
module.exports = {
20+
validateUserRoles,
21+
};

routes/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ app.use("/discord-actions", require("./discordactions.js"));
3030
app.use("/issues", require("./issues.js"));
3131
app.use("/progresses", require("./progresses.js"));
3232
app.use("/monitor", require("./monitor.js"));
33-
33+
app.use("/staging", require("./staging.js"));
3434
module.exports = app;

routes/staging.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const express = require("express");
2+
const authenticate = require("../middlewares/authenticate");
3+
const { validateUserRoles } = require("../middlewares/validators/staging");
4+
const { updateRoles } = require("../controllers/staging");
5+
const router = express.Router();
6+
7+
router.patch("/user", validateUserRoles, authenticate, updateRoles);
8+
9+
module.exports = router;

0 commit comments

Comments
 (0)