-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpush.js
77 lines (66 loc) · 1.8 KB
/
push.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
const {
matches,
verifySignature,
} = require("./helpers");
function isInitialRequest(data) {
return !data.ref && data.hook;
}
function extractRequestParams(req, data) {
const [, pushTypeInfo, ...pushNameInfo] = data.ref.split("/");
const pushName = Array.isArray(pushNameInfo) ? pushNameInfo.join("/") : pushNameInfo;
let pushType = null;
let branchName = null;
switch (pushTypeInfo) {
case "heads":
pushType = "branch";
branchName = pushName;
break;
case "tags":
pushType = "tag";
[, , branchName] = data.base_ref.split("/");
break;
default:
throw new Error("Bad Push Type");
}
return {
repositoryName: data.repository.name,
pushName,
pushType,
branchName,
secret: req.headers["x-hub-signature-256"],
};
}
function extractTriggerParams(trigger) {
return {
repositoryNamePattern: trigger.params.repoName,
branchNamePattern: trigger.params.branchPat,
tagNamePattern: trigger.params.tagPat,
secret: trigger.params.secret,
};
}
function requestSatisfiesTriggerConditions(triggerParams, requestParams, rawData) {
if (!matches(requestParams.repositoryName, triggerParams.repositoryNamePattern)) {
return false;
}
if (requestParams.pushType === "branch"
&& !matches(requestParams.pushName, triggerParams.branchNamePattern)
) {
return false;
}
if (requestParams.pushType === "tag"
&& (!matches(requestParams.branchName, triggerParams.branchNamePattern)
|| !matches(requestParams.pushName, triggerParams.tagNamePattern))
) {
return false;
}
if (!verifySignature(triggerParams.secret, requestParams.secret, rawData)) {
return false;
}
return true;
}
module.exports = {
isInitialRequest,
extractRequestParams,
extractTriggerParams,
requestSatisfiesTriggerConditions,
};