From 2415e6d7b72cd206cc9a4d3e64548041391a76c2 Mon Sep 17 00:00:00 2001 From: Richie Zhang <12566991+StaticallyTypedRice@users.noreply.github.com> Date: Sun, 10 May 2020 00:12:53 -0700 Subject: [PATCH] Improve init-db.sh Allow custom database parameters. Abstract common functionality. --- server/db-init.sh | 113 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 88 insertions(+), 25 deletions(-) diff --git a/server/db-init.sh b/server/db-init.sh index 87f39eada..a2ad77b59 100755 --- a/server/db-init.sh +++ b/server/db-init.sh @@ -1,43 +1,106 @@ -#!/bin/bash +#!/bin/sh +# Default configurations username=lemmy dbname=lemmy port=5432 -password="" -password_confirm="" -password_valid=0 +yes_no_prompt_invalid() { + echo "Invalid input. Please enter either \"y\" or \"n\"." 1>&2 +} -while [ "$password_valid" == 0 ] -do - read -p "Enter database password: " -s password +print_config() { + echo " database name: $dbname" + echo " username: $username" + echo " port: $port" +} + +ask_for_db_config() { + echo "The default database configuration is:" + print_config echo - read -p "Verify database password: " -s password_confirm - echo - echo - - # Start the loop from the top if either check fails - if [ -z "$password" ] - then - echo "Error: Password cannot be empty." 1>&2 + default_config_final=0 + default_config_valid=0 + while [ "$default_config_valid" == 0 ] + do + read -p "Use this configuration (y/n)? " default_config + case "$default_config" in + [yY]* ) default_config_valid=1; default_config_final=1;; + [nN]* ) default_config_valid=1; default_config_final=0;; + * ) yes_no_prompt_invalid;; + esac echo - continue - fi - if [ "$password" != "$password_confirm" ] + done + + if [ "$default_config_final" == 0 ] then - echo "Error: Passwords don't match." 1>&2 - echo - continue + config_ok_final=0 + while [ "$config_ok_final" == 0 ] + do + read -p "Database name: " dbname + read -p "Username: " username + read -p "Port: " port + #echo + + #echo "The database configuration is:" + #print_config + #echo + + config_ok_valid=0 + while [ "$config_ok_valid" == 0 ] + do + read -p "Use this configuration (y/n)? " config_ok + case "$config_ok" in + [yY]* ) config_ok_valid=1; config_ok_final=1;; + [nN]* ) config_ok_valid=1; config_ok_final=0;; + * ) yes_no_prompt_invalid;; + esac + echo + done + done fi +} - # Set the password_valid variable to break out of the loop - password_valid=1 -done +ask_for_password() { + password="" + password_confirm="" + password_valid=0 + while [ "$password_valid" == 0 ] + do + read -p "Enter database password: " -s password + echo + read -p "Verify database password: " -s password_confirm + echo + echo + + # Start the loop from the top if either check fails + if [ -z "$password" ] + then + echo "Error: Password cannot be empty." 1>&2 + echo + continue + fi + if [ "$password" != "$password_confirm" ] + then + echo "Error: Passwords don't match." 1>&2 + echo + continue + fi + + # Set the password_valid variable to break out of the loop + password_valid=1 + done +} + +ask_for_db_config + +ask_for_password psql -c "CREATE USER $username WITH PASSWORD '$password' SUPERUSER;" -U postgres psql -c "CREATE DATABASE $dbname WITH OWNER $username;" -U postgres export LEMMY_DATABASE_URL=postgres://$username:$password@localhost:$port/$dbname -echo $LEMMY_DATABASE_URL +echo "The database URL is $LEMMY_DATABASE_URL" +