#!/usr/bin/env bash

set -ueo pipefail

usage()
{
  cat 1>&2 <<EOF
Configures DIR and the current PostgreSQL instance for use by pdb-test-env.

Usage: setup-pdb-pg DIR
EOF
}

if test "$#" -lt 1; then
    usage
    exit 1
fi

readonly dir="$1"

mkdir -p "$dir"
cd "$dir" > /dev/null

if test -e pass -o -e pass-admin -o -e pgpass; then
    echo "$dir appears to already contain a PuppetDB PostreSQL directory" 1>&2
    exit 1
fi

passwd="$(dd if=/dev/urandom bs=1 count=32 | base64)"
admin_passwd="$(dd if=/dev/urandom bs=1 count=32 | base64)"
readonly passwd admin_passwd

install -m 0600 /dev/null pass
echo -n "$passwd" > pass

install -m 0600 /dev/null pass-admin
echo -n "$admin_passwd" > pass-admin

install -m 0600 /dev/null pgpass
echo '# hostname:port:database:username:password' > pgpass
echo "*:*:*:pdb_test_admin:$admin_passwd" >> pgpass
echo "*:*:*:pdb_test:$passwd" >> pgpass

createuser -dERs pdb_test_admin
createuser -DERS pdb_test

tmp_cmds="$(mktemp ./tmp-cmds-XXXXXX)"
trap "rm -f '$tmp_cmds'" EXIT

echo -n "alter role pdb_test with password '" > "$tmp_cmds"
cat pass >> "$tmp_cmds"
echo "';" >> "$tmp_cmds"
psql -f "$tmp_cmds" postgres

echo -n "alter role pdb_test_admin with password '" > "$tmp_cmds"
cat pass-admin >> "$tmp_cmds"
echo "';" >> "$tmp_cmds"
psql -f "$tmp_cmds" postgres
