1
1
#! /bin/bash
2
2
3
+ urlencode () {
4
+ local length=" ${# 1} "
5
+ for (( i = 0 ; i < length; i++ )) ; do
6
+ local c=" ${1: i: 1} "
7
+ case $c in
8
+ [a-zA-Z0-9.~_-]) printf " $c " ;;
9
+ * ) printf ' %s' " $c " | xxd -p -c1 |
10
+ while read c; do printf ' %%%s' " $c " ; done ;;
11
+ esac
12
+ done
13
+ }
14
+
15
+ urldecode () {
16
+ local url_encoded=" ${1// +/ } "
17
+ printf ' %b' " ${url_encoded//%/ \\ x} "
18
+ }
19
+
3
20
set -e
4
21
5
22
if [ -z " $webhook_url " ]; then
@@ -12,32 +29,44 @@ if [ -z "$webhook_secret" ]; then
12
29
exit 1
13
30
fi
14
31
15
- WEBHOOK_ENDPOINT=$webhook_url
16
-
17
- if [ -n " $webhook_auth " ]; then
18
- WEBHOOK_ENDPOINT=" -u $webhook_auth $webhook_url "
19
- fi
20
-
21
32
if [ -n " $webhook_type " ] && [ " $webhook_type " == " form-urlencoded" ]; then
33
+
34
+ event=` urlencode " $GITHUB_EVENT_NAME " `
35
+ repository=` urlencode " $GITHUB_REPOSITORY " `
36
+ commit=` urlencode " $GITHUB_SHA " `
37
+ ref=` urlencode " $GITHUB_REF " `
38
+ head=` urlencode " $GITHUB_HEAD_REF " `
39
+ workflow=` urlencode " $GITHUB_WORKFLOW " `
40
+
22
41
CONTENT_TYPE=" application/x-www-form-urlencoded"
23
- FORM_DATA=" event=$GITHUB_EVENT_NAME &repository=$GITHUB_REPOSITORY &commit=$GITHUB_SHA &ref=$GITHUB_REF &head=$GITHUB_HEAD_REF &workflow=$GITHUB_WORKFLOW "
42
+ FORM_DATA=" event=$event &repository=$repository &commit=$commit &ref=$ref &head=$head &workflow=$workflow "
43
+
24
44
if [ -n " $data " ]; then
25
45
WEBHOOK_DATA=" $FORM_DATA &$data "
26
46
else
27
47
WEBHOOK_DATA=" $FORM_DATA "
28
48
fi
49
+
29
50
else
51
+
30
52
CONTENT_TYPE=" application/json"
31
53
JSON_DATA=" \" event\" :\" $GITHUB_EVENT_NAME \" ,\" repository\" :\" $GITHUB_REPOSITORY \" ,\" commit\" :\" $GITHUB_SHA \" ,\" ref\" :\" $GITHUB_REF \" ,\" head\" :\" $GITHUB_HEAD_REF \" ,\" workflow\" :\" $GITHUB_WORKFLOW \" "
54
+
32
55
if [ -n " $data " ]; then
33
56
COMPACT_JSON=$( echo -n " $data " | jq -c ' ' )
34
57
WEBHOOK_DATA=" {$JSON_DATA ,\" data\" :$COMPACT_JSON }"
35
58
else
36
59
WEBHOOK_DATA=" {$JSON_DATA }"
37
60
fi
61
+
38
62
fi
39
63
40
64
WEBHOOK_SIGNATURE=$( echo -n " $WEBHOOK_DATA " | openssl sha1 -hmac " $webhook_secret " -binary | xxd -p)
65
+ WEBHOOK_ENDPOINT=$webhook_url
66
+
67
+ if [ -n " $webhook_auth " ]; then
68
+ WEBHOOK_ENDPOINT=" -u $webhook_auth $webhook_url "
69
+ fi
41
70
42
71
echo " Content Type: $CONTENT_TYPE "
43
72
@@ -48,7 +77,6 @@ curl -k -v \
48
77
-H " X-GitHub-Delivery: $GITHUB_RUN_NUMBER " \
49
78
-H " X-GitHub-Event: $GITHUB_EVENT_NAME " \
50
79
--data " $WEBHOOK_DATA " $WEBHOOK_ENDPOINT
51
- # -D - $WEBHOOK_ENDPOINT --data-urlencode @"$GITHUB_EVENT_PATH"
52
80
53
81
# wget -q --server-response --timeout=2000 -O - \
54
82
# --header="Content-Type: application/json" \
0 commit comments