#!/bin/bash

. lib/common

set -e

PASSWORD="$(relation-get password)"
USER="$(relation-get user)"
DBNAME="$(relation-get dbname)"


## This check adds purely arbitrary limits to what could be a password
## if we need to open that more, just consider the next script where we'll
## need to write in a PHP structure, or in YAML structure.

## Note that here, "[]" chars are not accepted just because it doesn't seem evident
## to test for those in bash.
if ! [[ "$PASSWORD" =~ ^[a-zA-Z0-9~\`\&+=@\#^\*/\\_%\$:\;\!?.,\<\>{}()\"\'|-]*$ ]]; then
     err "Invalid password chosen for postgres database."
     exit 1
fi

## if config is not existent
if [ -e "$CONFIGFILE" ] && grep "^  'dbuser' => '" "$CONFIGFILE" >/dev/null; then

    ## 'occ' can't be used as it will try to connect to postgres before running and
    ## will fail if user/password is not correct

    ## We need to get through bash, and sed interpretation, then PHP single quoted strings.
    quoted_user="${USER//\\/\\\\\\\\\\}"
    quoted_user="${quoted_user//\'/\\\\\'}"
    quoted_password="${PASSWORD//\\/\\\\\\\\\\}"
    quoted_password="${quoted_password//\'/\\\\\'}"
    sed -ri "s/^(  'dbuser' => ')(.*)(',)$/\1${quoted_user}\3/g;\
             s/^(  'dbpassword' => ')(.*)(',)$/\1${quoted_password}\3/g;" "$CONFIGFILE"
else

    ## These variable are not used by current docker image after first install

    config-add "\
services:
  $MASTER_BASE_SERVICE_NAME:
    environment:
      POSTGRES_HOST: $MASTER_TARGET_SERVICE_NAME
      POSTGRES_DB: $DBNAME
      POSTGRES_PASSWORD: $PASSWORD
      POSTGRES_USER: $USER
"
fi

info "Configured $SERVICE_NAME code for $TARGET_SERVICE_NAME access."