1212set -o pipefail
1313
1414_GITHUB_HOST=${GITHUB_HOST:= " github.com" }
15-
1615# If URL is not github.com then use the enterprise api endpoint
1716if [[ ${GITHUB_HOST} = " github.com" ]]; then
1817 URI=" https://api.${_GITHUB_HOST} "
@@ -25,33 +24,30 @@ API_HEADER="Accept: application/vnd.github.${API_VERSION}+json"
2524CONTENT_LENGTH_HEADER=" Content-Length: 0"
2625APP_INSTALLATIONS_URI=" ${URI} /app/installations"
2726
28-
2927# JWT parameters based off
3028# https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app
3129#
3230# JWT token issuance and expiration parameters
3331JWT_IAT_DRIFT=60
3432JWT_EXP_DELTA=600
35-
3633JWT_JOSE_HEADER=' {
3734 "alg": "RS256",
3835 "typ": "JWT"
3936}'
4037
41-
4238build_jwt_payload () {
43- now =$( date +%s)
44- iat =$(( now - JWT_IAT_DRIFT))
39+ NOW =$( date +%s)
40+ IAT =$(( NOW - JWT_IAT_DRIFT))
4541 jq -c \
46- --arg iat_str " ${iat } " \
42+ --arg iat_str " ${IAT } " \
4743 --arg exp_delta_str " ${JWT_EXP_DELTA} " \
4844 --arg app_id_str " ${APP_ID} " \
4945 '
50- ($iat_str | tonumber) as $iat
46+ ($iat_str | tonumber) as $IAT
5147 | ($exp_delta_str | tonumber) as $exp_delta
5248 | ($app_id_str | tonumber) as $app_id
53- | .iat = $iat
54- | .exp = ($iat + $exp_delta)
49+ | .IAT = $IAT
50+ | .exp = ($IAT + $exp_delta)
5551 | .iss = $app_id
5652 ' <<< " {}" | tr -d ' \n'
5753}
@@ -65,25 +61,28 @@ rs256_sign() {
6561}
6662
6763request_access_token () {
68- jwt_payload =$( build_jwt_payload)
69- encoded_jwt_parts =$( base64url <<< " ${JWT_JOSE_HEADER}" ) .$( base64url <<< " ${jwt_payload }" )
70- encoded_mac =$( echo -n " ${encoded_jwt_parts } " | rs256_sign " ${APP_PRIVATE_KEY} " | base64url)
71- generated_jwt =" ${encoded_jwt_parts } .${encoded_mac } "
64+ JWT_PAYLOAD =$( build_jwt_payload)
65+ ENCODED_JWT_PARTS =$( base64url <<< " ${JWT_JOSE_HEADER}" ) .$( base64url <<< " ${JWT_PAYLOAD }" )
66+ ENCODED_MAC =$( echo -n " ${ENCODED_JWT_PARTS } " | rs256_sign " ${APP_PRIVATE_KEY} " | base64url)
67+ GENERATED_JWT =" ${ENCODED_JWT_PARTS } .${ENCODED_MAC } "
7268
73- auth_header =" Authorization: Bearer ${generated_jwt } "
69+ AUTH_HEADER =" Authorization: Bearer ${GENERATED_JWT } "
7470
75- app_installations_response =$( curl -sX GET \
76- -H " ${auth_header } " \
71+ APP_INSTALLATIONS_RESPONSE =$( curl -sX GET \
72+ -H " ${AUTH_HEADER } " \
7773 -H " ${API_HEADER} " \
7874 " ${APP_INSTALLATIONS_URI} " \
7975 )
80- access_token_url=$( echo " ${app_installations_response} " | jq --raw-output ' .[] | select (.account.login == "' " ${APP_LOGIN} " ' " and .app_id == ' " ${APP_ID} " ' ) .access_tokens_url' )
76+ ACCESS_TOKEN_URL=$( echo " ${APP_INSTALLATIONS_RESPONSE} " | \
77+ jq --raw-output ' .[] | select (.account.login == "' " ${APP_LOGIN} " ' " and .app_id == ' " ${APP_ID} " ' ) .access_tokens_url' )
8178 curl -sX POST \
8279 -H " ${CONTENT_LENGTH_HEADER} " \
83- -H " ${auth_header } " \
80+ -H " ${AUTH_HEADER } " \
8481 -H " ${API_HEADER} " \
85- " ${access_token_url } " | \
82+ " ${ACCESS_TOKEN_URL } " | \
8683 jq --raw-output .token
8784}
8885
8986request_access_token
87+
88+ exit 0
0 commit comments