| #!/usr/bin/env bash | |
| # We try not to rely on there being anything installed on the | |
| # local machine so although it would be nice to use `jq` here | |
| # we don't do so. This means that a selenium build needs very | |
| # little installed by the user | |
| function emit_headers() { | |
| echo "{\"headers\":{\"Authorization\":[\"Bearer ${1}\"]}}" | |
| exit 0 | |
| } | |
| function netrc_password() { | |
| if [ ! -e "$HOME/.netrc" ]; then | |
| return | |
| fi | |
| cat $HOME/.netrc | sed -e 's/#.*//' | awk -v host="$1" -v field=password '{ | |
| if ($1 == "machine") { | |
| found = ($2 == host); | |
| } else if (found && ($1 == field)) { | |
| print $2; | |
| exit | |
| } else if (found && $1 == "machine") { | |
| found = false | |
| } | |
| }' | |
| } | |
| function get() { | |
| INPUT=$1 | |
| if [ -z "$(echo "$INPUT" | grep "gypsum.cluster")" ]; then | |
| exit 0 | |
| fi | |
| if [ -n "$GITHUB_TOKEN" ]; then | |
| emit_headers "$GITHUB_TOKEN" | |
| fi | |
| if [ -n "$ENGFLOW_GITHUB_TOKEN" ]; then | |
| emit_headers "${ENGFLOW_GITHUB_TOKEN}" | |
| fi | |
| NETRC="$(netrc_password github.com)" | |
| if [ -n "${NETRC}" ]; then | |
| emit_headers "${NETRC}" | |
| fi | |
| KEYCHAIN="$(security find-generic-password -a selenium -s 'Selenium EngFlow' -w )" 2>/dev/null | |
| if [ -n "$KEYCHAIN" ]; then | |
| emit_headers "${KEYCHAIN}" | |
| fi | |
| echo "{\"headers\":{}}" | |
| exit 0 | |
| } | |
| function set() { | |
| security add-generic-password -a selenium -s 'Selenium EngFlow' -w "$1" | |
| exit 0 | |
| } | |
| cmd=$1 | |
| case $cmd in | |
| "get") | |
| get "$(</dev/stdin)" | |
| ;; | |
| "set") | |
| set "$(</dev/stdin)" | |
| ;; | |
| "test") | |
| get '{"uri":"https://gypsum.cluster.engflow.com/google.devtools.build.v1.PublishBuildEvent"}' | |
| ;; | |
| *) | |
| exit 1 | |
| ;; | |
| esac |