#!/bin/bash

set -e
set -o pipefail

function downloadVaultUserToken {
  os=$(uname | awk '{print tolower($0)}')
  curl -sSLfo ${HOME}/bin/vault-user-token \
    https://github.com/Luzifer/vault-user-token/releases/download/${VAULT_USER_TOKEN_VERSION}/vault-user-token_${os}_amd64
  chmod 0755 ${HOME}/bin/vault-user-token
}

source ${HOME}/.config/vault-user-token

if ! (vault token-lookup 1>/dev/null 2>&1); then
  echo "Vault is not authenticated, trying to authenticate... "

  [ -f ${HOME}/bin/vault-user-token ] || downloadVaultUserToken
  ( test "$(${HOME}/bin/vault-user-token --version)" == "vault-user-token ${VAULT_USER_TOKEN_VERSION}" ) || downloadVaultUserToken

  ${HOME}/bin/vault-user-token --full-hostname=false &
  VUT=$!

  echo "Waiting for token to become available"
  while ! [ -f ${HOME}/.vault-token ]; do
    # Give the program a moment to get a token
    echo -n .
    sleep 0.5

    if ! ( kill -0 $VUT ); then
      echo "vault-user-token exitted, giving up."
      exit 1
    fi
  done
  echo

  if ! (vault token-lookup 1>/dev/null 2>&1); then
    echo "Vault authentication failed finally"
    exit 1
  fi

fi