#!/bin/bash . lib/common set -e TYPE="$(relation-get type)" || { err "No ${WHITE}type${NORMAL} set in relation." exit 1 } 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 $type 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 db 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//\'/\\\\\'}" case "$TYPE" in mysql) nextcloud_type="mysql";; postgres) nextcloud_type="pgsql";; *) err "Unknown type '$TYPE' for database." exit 1 ;; esac sed -ri "s/^( 'dbuser' => ')(.*)(',)$/\1${quoted_user}\3/g;\ s/^( 'dbpassword' => ')(.*)(',)$/\1${quoted_password}\3/g;\ s/^( 'dbtype' => ')(.*)(',)$/\1${nextcloud_type}\3/g;\ s/^( 'dbhost' => ')(.*)(',)$/\1${MASTER_TARGET_SERVICE_NAME}\3/g;\ " "$CONFIGFILE" else ## These variable are not used by current docker image after first install if [ "$TYPE" == "mysql" ]; then database_env_label="DATABASE" else database_env_label="DB" fi config-add "\ services: $MASTER_BASE_SERVICE_NAME: environment: ${TYPE^^}_HOST: $MASTER_TARGET_SERVICE_NAME ${TYPE^^}_${database_env_label}: $DBNAME ${TYPE^^}_PASSWORD: $PASSWORD ${TYPE^^}_USER: $USER " fi info "Configured $SERVICE_NAME code for $TARGET_SERVICE_NAME access."