Skip to content
This repository was archived by the owner on Feb 11, 2022. It is now read-only.

Commit 220e00f

Browse files
committed
fix(pr): verified the PR sender rather than the event sender
1 parent 633a37b commit 220e00f

File tree

4 files changed

+16
-14
lines changed

4 files changed

+16
-14
lines changed

src/handler.js

+6-6
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ async function processStatusEvent(payload, settings, request, responseToolkit, l
8585
}
8686

8787
async function processCheckRunEvent(request, responseToolkit, settings, log) {
88-
const {repository, check_run: checkRun, sender} = request.payload;
88+
const {repository, check_run: checkRun} = request.payload;
8989

9090
if (checkRunEventIsSuccessfulAndCouldBeForGreenkeeperPR(checkRun, log)) {
9191
const {check_suite: {pull_requests: pullRequests}} = checkRun;
@@ -94,18 +94,18 @@ async function processCheckRunEvent(request, responseToolkit, settings, log) {
9494
if (!pullRequests.length) return responseToolkit.response('no PRs for this commit').code(BAD_REQUEST);
9595
if (1 < pullRequests.length) return responseToolkit.response(boom.internal('too many PRs exist for this commit'));
9696

97-
const senderUrl = sender.html_url;
98-
if (!openedByGreenkeeperBot(senderUrl)) {
99-
return responseToolkit.response(`PR is not from greenkeeper, but from ${senderUrl}`).code(BAD_REQUEST);
100-
}
101-
10297
let pullRequest;
10398
try {
10499
pullRequest = await getPullRequest(repository, pullRequests[0].number);
105100
} catch (err) {
106101
throw boom.internal('failed to fetch PRs', err);
107102
}
108103

104+
const senderUrl = pullRequest.user.html_url;
105+
if (!openedByGreenkeeperBot(senderUrl)) {
106+
return responseToolkit.response(`PR is not from greenkeeper, but from ${senderUrl}`).code(BAD_REQUEST);
107+
}
108+
109109
process(pullRequest, settings, log);
110110
return responseToolkit.response('check_run event will be processed').code(ACCEPTED);
111111
}

test/integration/features/step_definitions/common-steps.js

-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ When(/^the webhook is received$/, function () {
1818
status: this.checkRunEventStatus,
1919
conclusion: this.checkRunEventConclusion,
2020
repoOwner: this.repoOwner,
21-
sender: this.prSender,
2221
prLink: this.prLink,
2322
prNumber: this.prNumber,
2423
...this.commitBranches && {branch: this.commitBranches[0]}

test/integration/features/support/world.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ function buildWebhookPayload(event, {statusEventDetails, checkRunEventDetails, r
3636
owner: {
3737
login: checkRunEventDetails.repoOwner
3838
}
39-
},
40-
sender: {html_url: checkRunEventDetails.sender}
39+
}
4140
};
4241
}
4342

test/unit/handler-test.js

+9-5
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ suite('handler', () => {
188188
const prNumber = any.integer();
189189
const sha = any.string();
190190
const partialPullRequest = {user: {html_url: greenkeeperSender}, number: prNumber};
191-
const fullPullRequest = any.simpleObject();
191+
const fullPullRequest = {...any.simpleObject(), user: {html_url: greenkeeperSender}};
192192
const request = {
193193
payload: {
194194
action: 'completed',
@@ -201,8 +201,7 @@ suite('handler', () => {
201201
pull_requests: [partialPullRequest]
202202
}
203203
},
204-
repository,
205-
sender: {html_url: greenkeeperSender}
204+
repository
206205
},
207206
headers: {'x-github-event': 'check_run'},
208207
log: () => undefined
@@ -323,6 +322,10 @@ suite('handler', () => {
323322

324323
test('that the response is bad-request if the PR is not from greenkeeper', () => {
325324
const senderUrl = any.url();
325+
const prNumber = any.integer();
326+
const repository = any.simpleObject();
327+
const partialPullRequest = {user: {html_url: greenkeeperSender}, number: prNumber};
328+
const fullPullRequest = {...any.simpleObject(), user: {html_url: senderUrl}};
326329
const request = {
327330
payload: {
328331
action: 'completed',
@@ -331,15 +334,16 @@ suite('handler', () => {
331334
conclusion: 'success',
332335
check_suite: {
333336
head_branch: any.word(),
334-
pull_requests: [any.simpleObject()]
337+
pull_requests: [partialPullRequest]
335338
}
336339
},
337-
sender: {html_url: senderUrl}
340+
repository
338341
},
339342
headers: {'x-github-event': 'check_run'},
340343
log: () => undefined
341344
};
342345
response.withArgs(`PR is not from greenkeeper, but from ${senderUrl}`).returns({code});
346+
getPullRequest.withArgs(repository, prNumber).resolves(fullPullRequest);
343347

344348
return handler(request, {response}, settings).then(() => assert.calledWith(code, BAD_REQUEST));
345349
});

0 commit comments

Comments
 (0)