177 lines
4.8 KiB
Bash
Executable File
177 lines
4.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
cd "$(dirname "${BASH_SOURCE[0]}")" || exit
|
|
|
|
## ==========================
|
|
# Wait for Mariadb Server to load
|
|
## ==========================
|
|
check_mariadb() {
|
|
mysqladmin ping -h"$DSQL_DB_HOST" -u"root" -p"$DSQL_MARIADB_ROOT_PASSWORD" --silent
|
|
}
|
|
|
|
echo "Waiting for MariaDB to be ready..."
|
|
|
|
until check_mariadb; do
|
|
sleep 2
|
|
done
|
|
|
|
echo "MariaDB is ready!"
|
|
|
|
## ==========================
|
|
# Load Env File
|
|
## ==========================
|
|
env_file="${1:-.env}"
|
|
|
|
if [ -f $env_file ]; then
|
|
source $env_file
|
|
else
|
|
echo ".env file not found! Please provide a .env file path or add said file to the working direcotry to continue."
|
|
exit 1
|
|
fi
|
|
|
|
## ==========================
|
|
# initialise variables
|
|
## ==========================
|
|
|
|
## ==========================
|
|
# Setup first root function
|
|
## ==========================
|
|
query_db_with_main_root() {
|
|
local query="$1"
|
|
local result=$(mariadb -u root -h $DSQL_DB_HOST -p$DSQL_MARIADB_ROOT_PASSWORD -e "$query")
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error executing the query."
|
|
return 2
|
|
fi
|
|
|
|
local row_count=$(echo "$result" | wc -l)
|
|
if ((row_count > 1)); then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
## ==========================
|
|
# Mariadb Query Function
|
|
## ==========================
|
|
query_db() {
|
|
local query="$1"
|
|
local result=$(mariadb -u root -h $DSQL_DB_HOST -p$DSQL_DB_PASSWORD -e "$query")
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
echo "Error executing the query."
|
|
return 2
|
|
fi
|
|
|
|
local row_count=$(echo "$result" | wc -l)
|
|
if ((row_count > 1)); then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# SQL=$(sed "s/\${\([^}]*\)}/\${\1}/g" "test.sql" | envsubst)
|
|
|
|
# query_db "$SQL"
|
|
|
|
## ==========================
|
|
# Check for required ENV Variables
|
|
## ==========================
|
|
if [ -z "${DSQL_DB_TARGET_IP_ADDRESS}" ]; then
|
|
echo "DSQL_DB_TARGET_IP_ADDRESS env is not set"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${DSQL_DB_PASSWORD}" ]; then
|
|
echo "DSQL_DB_PASSWORD env is not set"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${DSQL_DB_READ_ONLY_PASSWORD}" ]; then
|
|
echo "DSQL_DB_READ_ONLY_PASSWORD env is not set"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${DSQL_DB_FULL_ACCESS_PASSWORD}" ]; then
|
|
echo "DSQL_DB_FULL_ACCESS_PASSWORD env is not set"
|
|
exit 1
|
|
fi
|
|
|
|
## ==========================
|
|
# Create Datasquirel Root User
|
|
## ==========================
|
|
|
|
echo "HOST ENV: $DSQL_HOST_ENV"
|
|
|
|
if [ -n "${NEXT_PUBLIC_DSQL_LOCAL}" ]; then
|
|
if [[ "$DSQL_HOST_ENV" == *"dev_dev"* ]]; then
|
|
echo "Dev Environment. Root user setup not required"
|
|
else
|
|
query_db_with_main_root "select user,host from mysql.user where user='root' and host='$DSQL_DB_TARGET_IP_ADDRESS';"
|
|
|
|
if [[ $? == 0 ]]; then
|
|
echo "Root User Exists"
|
|
else
|
|
echo "No Root User. Creating ..."
|
|
query_db_with_main_root "CREATE USER IF NOT EXISTS 'root'@'$DSQL_DB_TARGET_IP_ADDRESS' IDENTIFIED BY '$DSQL_DB_PASSWORD';\
|
|
GRANT ALL PRIVILEGES ON *.* TO 'root'@'$DSQL_DB_TARGET_IP_ADDRESS' WITH GRANT OPTION;\
|
|
FLUSH PRIVILEGES;"
|
|
|
|
query_db "select user,host from mysql.user where user='root' and host='$DSQL_DB_TARGET_IP_ADDRESS';"
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Couldn't create root user."
|
|
exit 1
|
|
else
|
|
query_db "drop user 'root'@'%';"
|
|
fi
|
|
fi
|
|
fi
|
|
else
|
|
echo "Production Environment. Root user setup not required"
|
|
fi
|
|
|
|
## ==========================
|
|
# Create Datasquirel Database
|
|
## ==========================
|
|
check_database_exists=$(query_db "show databases like 'datasquirel';")
|
|
|
|
if [[ $? == 0 ]]; then
|
|
echo "Dsql Database exists"
|
|
else
|
|
echo "Dsql Database does not exist. Creating ..."
|
|
query_db "create database datasquirel;"
|
|
fi
|
|
|
|
## ==========================
|
|
# Create Datasquirel Read Only User
|
|
## ==========================
|
|
query_db "select user,host from mysql.user where user = '$DSQL_DB_READ_ONLY_USERNAME' and host = '$DSQL_DB_TARGET_IP_ADDRESS';"
|
|
|
|
if [[ $? == 0 ]]; then
|
|
echo "$DSQL_DB_READ_ONLY_USERNAME User Exists"
|
|
else
|
|
echo "No $DSQL_DB_READ_ONLY_USERNAME User. Creating ..."
|
|
query_db "CREATE USER IF NOT EXISTS '$DSQL_DB_READ_ONLY_USERNAME'@'$DSQL_DB_TARGET_IP_ADDRESS' IDENTIFIED BY '$DSQL_DB_READ_ONLY_PASSWORD' REQUIRE SSL;"
|
|
fi
|
|
|
|
## ==========================
|
|
# Create Datasquirel Full Access User
|
|
## ==========================
|
|
DSQL_DB_FULL_ACCESS_USERNAME="datasquirel_full_access"
|
|
query_db "select user,host from mysql.user where user = '$DSQL_DB_FULL_ACCESS_USERNAME' and host = '$DSQL_DB_TARGET_IP_ADDRESS';"
|
|
|
|
if [[ $? == 0 ]]; then
|
|
echo "$DSQL_DB_FULL_ACCESS_USERNAME User Exists"
|
|
else
|
|
echo "No $DSQL_DB_FULL_ACCESS_USERNAME User. Creating ..."
|
|
query_db "CREATE USER IF NOT EXISTS '$DSQL_DB_FULL_ACCESS_USERNAME'@'$DSQL_DB_TARGET_IP_ADDRESS' IDENTIFIED BY '$DSQL_DB_FULL_ACCESS_PASSWORD' REQUIRE SSL;"
|
|
fi
|
|
|
|
query_db "FLUSH PRIVILEGES;"
|
|
|
|
exit 0
|