#!/usr/bin/bash

if [[ "${BASH_SOURCE[0]}" != "${0}" ]]; then
  echo "This script is intended to be run, not sourced." >&2
  return 1
fi

set -e

set_redis_password() {
  printf '%s' "$1" | podman secret create discovery-redis-password --replace -
  podman secret ls --filter name=discovery-redis-password
}

generate_and_set_password() {
  local redis_pass
  redis_pass=$(head -c 16 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9')
  set_redis_password "${redis_pass}"
}

prompt_and_set_password() {
  local redis_pass
  read -srp "Enter the new Redis server password: " redis_pass
  echo
  [[ -z "${redis_pass}" ]] && echo "The Redis server password cannot be blank." >&2 && exit 1
  read -srp "Re-enter the password: " redis_pass2
  echo
  [[ ! "${redis_pass}" = "${redis_pass2}" ]] && echo "Redis server passwords do not match." >&2 && exit 1
  set_redis_password "${redis_pass}"
}

generate_or_prompt_password() {
  while true; do
    read -rp "Automatically generate a new Redis server password? [y/n]: " yn
    case $yn in
    [Yy])
      generate_and_set_password
      exit
      ;;
    [Nn])
      prompt_and_set_password
      exit
      ;;
    esac
  done
}

while getopts "Yy" opt; do
  case $opt in
  [Yy])
    generate_and_set_password
    exit
    ;;
  *) ;;
  esac
done

generate_or_prompt_password
