forked from 0k/0k-charms
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
76 lines
2.4 KiB
#!/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 -i 's/\r//' "$CONFIGFILE" ## Remove DOS/WIN carriage returns if any
|
|
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;\
|
|
s/^( 'dbname' => ')(.*)(',)$/\1${DBNAME}\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."
|