#!/bin/bash
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1

function retry {
  local retries=$1
  shift
  local count=0

  until "$@"; do
    exit=$?
    wait=$((2 ** count))
    count=$((count + 1))

    if [ "$count" -lt "$retries" ]; then
      sleep "$wait"
    else
      return "$exit"
    fi
  done

  return 0
}

export VAULT_ADDR=http://localhost:8200
export VAULT_TOKEN='${vault_root_token}'

cat > ./kms-transit.hcl << EOF
# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1

path "transit/encrypt/boundary-recovery" {
  capabilities = ["create", "update"]
}

path "transit/decrypt/boundary-recovery" {
  capabilities = ["create", "update"]
}

path "transit/encrypt/boundary-worker-auth" {
  capabilities = ["create", "update"]
}

path "transit/decrypt/boundary-worker-auth" {
  capabilities = ["create", "update"]
}

path "transit/encrypt/boundary-root" {
  capabilities = ["create", "update"]
}

path "transit/decrypt/boundary-root" {
  capabilities = ["create", "update"]
}

path "transit/encrypt/boundary-bsr" {
  capabilities = ["create", "update"]
}

path "transit/decrypt/boundary-bsr" {
  capabilities = ["create", "update"]
}
EOF

retry 5 ${vault_bin_path} secrets enable transit > /dev/null

retry 5 ${vault_bin_path} policy write boundary-kms-transit-policy ./kms-transit.hcl  > /dev/null

rm ./kms-transit.hcl > /dev/null

retry 5 ${vault_bin_path} token create -policy=boundary-kms-transit-policy -field=token
