61 lines
1.6 KiB
Bash
Executable File
61 lines
1.6 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
# https://unix.stackexchange.com/a/423052
|
|
function find_free_port {
|
|
comm -23 <(seq 49152 65535 | sort) <(ss -Htan | awk '{print $4}' | cut -d':' -f2 | sort -u) | shuf | head -n 1
|
|
}
|
|
|
|
# gen_webhook "REPO_URL"
|
|
#function gen_webhook {
|
|
# echo "{ \"project\": { \"git_http_url\": \"$1\" } }"
|
|
#}
|
|
|
|
function gen_webhook() {
|
|
export repo_url="$2"
|
|
envsubst < "$BATS_TEST_DIRNAME"/"$1"
|
|
}
|
|
|
|
# send_webhook "ENDPOINT" "PAYLOAD" "SECRET" "HEADER"
|
|
# ENDPOINT: where to send the request
|
|
# PAYLOAD: POST body
|
|
# SECRET: the secret for this transaction
|
|
# HEADER: where to store the secret
|
|
function send_webhook {
|
|
echo "$2" > $TMPFILE
|
|
|
|
# We can make a few attempts, just in case the webserver hasn't started yet
|
|
n=0
|
|
while [[ "$status" != "0" ]]; do
|
|
if [ $n -eq 3 ]; then
|
|
# Failed to reach server after 3 attempts
|
|
return 1;
|
|
fi
|
|
# --data-binary so that newlines aren't broken
|
|
# (otherwise, signature won't match)
|
|
run curl --header "Content-Type: application/json" \
|
|
--header ""$4": "$3"" \
|
|
--request POST \
|
|
--data-binary @$TMPFILE \
|
|
-s -w "%{http_code}" \
|
|
"$1"
|
|
# Requested succeeded, break out of loop
|
|
if [ $status -eq 0 ]; then
|
|
echo "$output"
|
|
if [[ ! "$output" = 200 ]]; then return 2; fi
|
|
return 0;
|
|
fi
|
|
((n++))
|
|
sleep 0.1
|
|
done
|
|
}
|
|
|
|
# https://stackoverflow.com/a/7385197
|
|
function hash_hmac {
|
|
digest="$1"
|
|
data="$2"
|
|
key="$3"
|
|
shift 3
|
|
# Don't print (stdin)= ...
|
|
echo -n "$data" | openssl dgst "-$digest" -hmac "$key" | awk '{print $2}'
|
|
}
|