Skip to content

Commit 6a4319c

Browse files
Fix: Allow Only Super Users or Request Owners to Edit Extension Requests (#2398)
* fix: allow only super users or request owners to edit request * refactor: extract isSuperUser variable to improve readability * refactor/test name * refactor/jwt-token-name * fix:test-case-fail * refactor/uneccessay-change --------- Co-authored-by: Achintya Chatterjee <[email protected]>
1 parent e7bb54b commit 6a4319c

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

controllers/extensionRequests.js

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,20 +204,21 @@ const getSelfExtensionRequests = async (req, res) => {
204204
const updateExtensionRequest = async (req, res) => {
205205
const { dev } = req.query;
206206
const isDev = dev === "true";
207+
const isSuperUser = req.userData?.roles.super_user;
207208
try {
208209
const extensionRequest = await extensionRequestsQuery.fetchExtensionRequest(req.params.id);
209210
if (!extensionRequest.extensionRequestData) {
210211
return res.boom.notFound("Extension Request not found");
211212
}
212213

213-
if (
214-
isDev &&
215-
!req.userData?.roles.super_user &&
216-
extensionRequest.extensionRequestData.status !== EXTENSION_REQUEST_STATUS.PENDING
217-
) {
214+
if (isDev && !isSuperUser && extensionRequest.extensionRequestData.status !== EXTENSION_REQUEST_STATUS.PENDING) {
218215
return res.boom.badRequest("Only pending extension request can be updated");
219216
}
220217

218+
if (isDev && !isSuperUser && extensionRequest.extensionRequestData.assigneeId !== req.userData.id) {
219+
return res.boom.forbidden("You don't have permission to update the extension request");
220+
}
221+
221222
if (req.body.assignee) {
222223
const { taskData: task } = await tasks.fetchTask(extensionRequest.extensionRequestData.taskId);
223224
if (task.assignee !== (await getUsername(req.body.assignee))) {

test/integration/extensionRequests.test.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const user = userData[6];
2222
const appOwner = userData[3];
2323
const superUser = userData[4];
2424

25-
let appOwnerjwt, superUserJwt, jwt, superUserId, extensionRequestId5;
25+
let appOwnerjwt, superUserJwt, jwt, user2Jwt, superUserId, extensionRequestId5;
2626

2727
describe("Extension Requests", function () {
2828
let taskId0,
@@ -40,13 +40,15 @@ describe("Extension Requests", function () {
4040

4141
before(async function () {
4242
const userId = await addUser(user);
43+
const userId2 = await addUser(userData[5]);
4344
user.id = userId;
4445
const appOwnerUserId = await addUser(appOwner);
4546
appOwner.id = appOwnerUserId;
4647
superUserId = await addUser(superUser);
4748
appOwnerjwt = authService.generateAuthToken({ userId: appOwnerUserId });
4849
superUserJwt = authService.generateAuthToken({ userId: superUserId });
4950
jwt = authService.generateAuthToken({ userId: userId });
51+
user2Jwt = authService.generateAuthToken({ userId: userId2 });
5052

5153
const taskData = [
5254
{
@@ -1094,6 +1096,26 @@ describe("Extension Requests", function () {
10941096
});
10951097
});
10961098

1099+
it("should return forbidden response if superuser or request owner does not update the request when dev is enabled", function (done) {
1100+
chai
1101+
.request(app)
1102+
.patch(`/extension-requests/${extensionRequestId4}?dev=true`)
1103+
.set("cookie", `${cookieName}=${user2Jwt}`)
1104+
.send({
1105+
title: "new-title",
1106+
})
1107+
.end((err, res) => {
1108+
if (err) {
1109+
return done(err);
1110+
}
1111+
expect(res).to.have.status(403);
1112+
expect(res.body)
1113+
.to.have.property("message")
1114+
.that.equals("You don't have permission to update the extension request");
1115+
return done();
1116+
});
1117+
});
1118+
10971119
it("Should return 400 if assignee of the extensionrequest is upated with a different user", function (done) {
10981120
chai
10991121
.request(app)

0 commit comments

Comments
 (0)