From 1b413a2aaff930ce3669b4edb2cdf16eb98aaa75 Mon Sep 17 00:00:00 2001 From: Manuel Cillero Date: Sat, 7 Dec 2024 20:06:52 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=A8=20Revisi=C3=B3n=20de=20scripts=20p?= =?UTF-8?q?ara=20base=20de=20datos=20de=20Drust?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools/create-drust-db.sh | 223 ++++++++++++++++++++++++--------------- tools/delete-drust-db.sh | 137 ++++++++++++++++++++++++ tools/drop-drust-db.sh | 105 ------------------ 3 files changed, 274 insertions(+), 191 deletions(-) create mode 100755 tools/delete-drust-db.sh delete mode 100755 tools/drop-drust-db.sh diff --git a/tools/create-drust-db.sh b/tools/create-drust-db.sh index 55d086b1..96c7d398 100755 --- a/tools/create-drust-db.sh +++ b/tools/create-drust-db.sh @@ -1,63 +1,133 @@ #!/bin/bash -# Ask the user which database system to use -read -p "Which database system are you using? (mysql/postgresql/sqlite): " DB_SYSTEM +create_mysql_database() { + echo "Setting up MySQL database \"$DB_NAME\"..." -# Check if selected database system is installed + # Verifica si la base de datos ya existe + DB_EXISTS=$(MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -sse \ + "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$DB_NAME';") + if [ "$DB_EXISTS" == "$DB_NAME" ]; then + echo "Database \"$DB_NAME\" already exists." + else + MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \ + "CREATE DATABASE $DB_NAME;" + [ $? -ne 0 ] && { echo "Error creating database \"$DB_NAME\"."; return 1; } + fi + + # Verifica si el usuario ya existe + USER_EXISTS=$(MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -sse \ + "SELECT User FROM mysql.user WHERE User = '$DB_USER';") + if [ "$USER_EXISTS" == "$DB_USER" ]; then + echo "User \"$DB_USER\" already exists." + else + MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \ + "CREATE USER '$DB_USER'@'$DB_HOST' IDENTIFIED BY '$DB_PASS';" + [ $? -ne 0 ] && { echo "Error creating user \"$DB_USER\"."; return 1; } + fi + + # Asigna privilegios al usuario para la base de datos + MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" -P "$DB_PORT" -e \ + "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'$DB_HOST'; FLUSH PRIVILEGES;" + [ $? -ne 0 ] && { echo "Error granting privileges to user \"$DB_USER\" for database \"$DB_NAME\"."; return 1; } + + return 0 +} + +create_psql_database() { + echo "Setting up PostgreSQL database \"$DB_NAME\"..." + + # Verifica si la base de datos ya existe + DB_EXISTS=$(PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -tAc \ + "SELECT 1 FROM pg_database WHERE datname='$DB_NAME'") + if [ "$DB_EXISTS" == "1" ]; then + echo "Database \"$DB_NAME\" already exists." + else + PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c "CREATE DATABASE $DB_NAME;" + [ $? -ne 0 ] && { echo "Error creating database \"$DB_NAME\"."; return 1; } + fi + + # Verifica si el usuario ya existe + USER_EXISTS=$(PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -tAc \ + "SELECT 1 FROM pg_catalog.pg_user WHERE usename='$DB_USER'") + if [ "$USER_EXISTS" == "1" ]; then + echo "User \"$DB_USER\" already exists." + else + PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" -c "CREATE USER $DB_USER WITH ENCRYPTED PASSWORD '$DB_PASS';" + [ $? -ne 0 ] && { echo "Error creating user \"$DB_USER\"."; return 1; } + fi + + # Asigna privilegios al usuario para la base de datos + PGPASSWORD="$DB_ADMIN_PASS" psql -U "$DB_ADMIN" -h "$DB_HOST" -p "$DB_PORT" < /dev/null; then - echo "mysql is not installed or not found in PATH. Please install mysql and try again." - exit 1 - fi -elif [ "$DB_SYSTEM" == "postgresql" ]; then - if ! command -v psql &> /dev/null; then - echo "postgresql is not installed or not found in PATH. Please install postgresql and try again." - exit 1 - fi + command -v mysql &>/dev/null || { echo "MySQL $ERROR_DB_NOT_INSTALLED"; exit 1; } +elif [ "$DB_SYSTEM" == "psql" ]; then + command -v psql &>/dev/null || { echo "PostgreSQL $ERROR_DB_NOT_INSTALLED"; exit 1; } elif [ "$DB_SYSTEM" == "sqlite" ]; then - if ! command -v sqlite3 &> /dev/null; then - echo "sqlite3 is not installed or not found in PATH. Please install sqlite3 and try again." - exit 1 - fi + command -v sqlite3 &>/dev/null || { echo "SQLite $ERROR_DB_NOT_INSTALLED"; exit 1; } else - echo "Invalid database system selected. Please choose either 'mysql', 'postgresql', or 'sqlite'." + echo "Invalid database system. Please choose either 'mysql', 'psql', or 'sqlite'." exit 1 fi -EXIT_CODE=0 +# Parámetros básicos +DEFAULT_DB_NAME="drust" +DEFAULT_DB_USER="drust" +DEFAULT_DB_PASS="demo" +DEFAULT_DB_HOST="localhost" +DEFAULT_DB_PORT="" +DEFAULT_DB_ADMIN="root" echo -echo "You will be prompted to provide details for creating the Drust database." +echo "You will be prompted to provide details for creating database." echo "Press ENTER to accept the default values." echo +read -p "Enter database name [$DEFAULT_DB_NAME]: " DB_NAME +DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME} + +if [[ -z "$DB_NAME" || ! "$DB_NAME" =~ ^[a-zA-Z0-9_\-]+$ ]]; then + echo "Invalid database name. Use only alphanumeric characters, dashes, or underscores." + exit 1 +fi + if [ "$DB_SYSTEM" == "sqlite" ]; then - DEFAULT_DB_NAME="drust.db" - - # Only prompt for database name, as user and password are not used by SQLite - read -p "Enter database name [$DEFAULT_DB_NAME]: " DB_NAME - DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME} - - # For SQLite, just check if the database file exists and create it if it doesn't - if [ ! -f "$DB_NAME" ]; then - echo "Creating SQLite database file: $DB_NAME" - sqlite3 "$DB_NAME" ".quit" - EXIT_CODE=$? - else - echo "SQLite database file $DB_NAME already exists." - exit 1 - fi + # Verifica si el archivo tiene una extensión válida para SQLite + [[ "$DB_NAME" != *".sqlite" && "$DB_NAME" != *".db" ]] && DB_NAME="$DB_NAME.sqlite" else - DEFAULT_DB_NAME="drust" - DEFAULT_DB_USER="drust" - DEFAULT_DB_PASS="demo" - DEFAULT_DB_HOST="localhost" - DEFAULT_DB_ADMIN="root" - - # Prompt for database details, allow defaults - read -p "Enter database name [$DEFAULT_DB_NAME]: " DB_NAME - DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME} - read -p "Enter database user [$DEFAULT_DB_USER]: " DB_USER DB_USER=${DB_USER:-$DEFAULT_DB_USER} @@ -67,53 +137,34 @@ else read -p "Enter database host [$DEFAULT_DB_HOST]: " DB_HOST DB_HOST=${DB_HOST:-$DEFAULT_DB_HOST} - # Prompt for database system root or another privileged user's credentials - echo + # Puerto por defecto para MySQL + [ "$DB_SYSTEM" == "mysql" ] && DEFAULT_DB_PORT="3306" + # Puerto por defecto para PostgreSQL + [ "$DB_SYSTEM" == "psql" ] && DEFAULT_DB_PORT="5432" + read -p "Enter database port [$DEFAULT_DB_PORT]: " DB_PORT + DB_PORT=${DB_PORT:-$DEFAULT_DB_PORT} + read -p "Enter $DB_SYSTEM admin user [$DEFAULT_DB_ADMIN]: " DB_ADMIN DB_ADMIN=${DB_ADMIN:-$DEFAULT_DB_ADMIN} read -sp "Enter $DB_SYSTEM admin password: " DB_ADMIN_PASS echo - - # Confirm before proceeding - echo - echo "You are about to create the database \"$DB_NAME\" and assign privileges to user \"$DB_USER\"." - read -p "Are you sure you want to proceed? (y/N): " confirm - if [[ ! "$confirm" =~ ^[Yy]$ ]]; then - echo "Operation cancelled." - exit 1 - fi - - # Execute commands for MySQL or PostgreSQL - if [ "$DB_SYSTEM" == "mysql" ]; then - MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" </dev/null || { echo "MySQL $ERROR_DB_NOT_INSTALLED"; exit 1; } +elif [ "$DB_SYSTEM" == "psql" ]; then + command -v psql &>/dev/null || { echo "PostgreSQL $ERROR_DB_NOT_INSTALLED"; exit 1; } +elif [ "$DB_SYSTEM" == "sqlite" ]; then + command -v sqlite3 &>/dev/null || { echo "SQLite $ERROR_DB_NOT_INSTALLED"; exit 1; } +else + echo "Invalid database system. Please choose either 'mysql', 'psql', or 'sqlite'." + exit 1 +fi + +# Parámetros básicos +DEFAULT_DB_NAME="drust" +DEFAULT_DB_USER="drust" +DEFAULT_DB_HOST="localhost" +DEFAULT_DB_PORT="" +DEFAULT_DB_ADMIN="root" + +echo +echo "You will be prompted to provide details for deleting database." +echo "Press ENTER to accept the default values." +echo + +read -p "Enter database name to delete [$DEFAULT_DB_NAME]: " DB_NAME +DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME} + +if [[ -z "$DB_NAME" || ! "$DB_NAME" =~ ^[a-zA-Z0-9_\-]+$ ]]; then + echo "Invalid database name. Use only alphanumeric characters, dashes, or underscores." + exit 1 +fi + +if [ "$DB_SYSTEM" == "sqlite" ]; then + # Verifica si el archivo tiene una extensión válida para SQLite + [[ "$DB_NAME" != *".sqlite" && "$DB_NAME" != *".db" ]] && DB_NAME="$DB_NAME.sqlite" +else + read -p "Enter database user to delete [$DEFAULT_DB_USER]: " DB_USER + DB_USER=${DB_USER:-$DEFAULT_DB_USER} + + read -p "Enter database host [$DEFAULT_DB_HOST]: " DB_HOST + DB_HOST=${DB_HOST:-$DEFAULT_DB_HOST} + + # Puerto por defecto para MySQL + [ "$DB_SYSTEM" == "mysql" ] && DEFAULT_DB_PORT="3306" + # Puerto por defecto para PostgreSQL + [ "$DB_SYSTEM" == "psql" ] && DEFAULT_DB_PORT="5432" + read -p "Enter database port [$DEFAULT_DB_PORT]: " DB_PORT + DB_PORT=${DB_PORT:-$DEFAULT_DB_PORT} + + read -p "Enter $DB_SYSTEM admin user [$DEFAULT_DB_ADMIN]: " DB_ADMIN + DB_ADMIN=${DB_ADMIN:-$DEFAULT_DB_ADMIN} + read -sp "Enter $DB_SYSTEM admin password: " DB_ADMIN_PASS + echo +fi + +# Confirmar antes de proceder +echo +echo "You are about to delete the database \"$DB_NAME\" and user \"$DB_USER\"." +read -p "Are you sure you want to proceed? (y/N): " confirm +if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo "Operation cancelled." + exit 1 +fi + +setup_database_deletion + +if [ $? -eq 0 ]; then + echo "Database and user deleted successfully." + exit 0 +else + echo "An error occurred during database deletion." + exit 1 +fi diff --git a/tools/drop-drust-db.sh b/tools/drop-drust-db.sh deleted file mode 100755 index bba6d676..00000000 --- a/tools/drop-drust-db.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash - -# Ask the user which database system to use -read -p "Which database system are you using? (mysql/postgresql/sqlite): " DB_SYSTEM - -# Check if selected database system is installed -if [ "$DB_SYSTEM" == "mysql" ]; then - if ! command -v mysql &> /dev/null; then - echo "mysql is not installed or not found in PATH. Please install mysql and try again." - exit 1 - fi -elif [ "$DB_SYSTEM" == "postgresql" ]; then - if ! command -v psql &> /dev/null; then - echo "postgresql is not installed or not found in PATH. Please install postgresql and try again." - exit 1 - fi -elif [ "$DB_SYSTEM" == "sqlite" ]; then - if ! command -v sqlite3 &> /dev/null; then - echo "sqlite3 is not installed or not found in PATH. Please install sqlite3 and try again." - exit 1 - fi -else - echo "Invalid database system selected. Please choose either 'mysql', 'postgresql', or 'sqlite'." - exit 1 -fi - -EXIT_CODE=0 - -echo -echo "You will be prompted to provide details to delete the Drust database." -echo "Press ENTER to accept the default values." -echo - -if [ "$DB_SYSTEM" == "sqlite" ]; then - DEFAULT_DB_NAME="drust.db" - - # Only prompt for database name - read -p "Enter database name to delete [$DEFAULT_DB_NAME]: " DB_NAME - DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME} - - # For SQLite, check if the database file exists and delete it - if [ -f "$DB_NAME" ]; then - echo "Deleting SQLite database file: $DB_NAME" - rm "$DB_NAME" - EXIT_CODE=$? - else - echo "SQLite database file $DB_NAME does not exist." - exit 1 - fi -else - DEFAULT_DB_NAME="drust" - DEFAULT_DB_USER="drust" - DEFAULT_DB_HOST="localhost" - DEFAULT_DB_ADMIN="root" - - # Prompt for database details, allow defaults - read -p "Enter database name to delete [$DEFAULT_DB_NAME]: " DB_NAME - DB_NAME=${DB_NAME:-$DEFAULT_DB_NAME} - - read -p "Enter database user to delete [$DEFAULT_DB_USER]: " DB_USER - DB_USER=${DB_USER:-$DEFAULT_DB_USER} - - read -p "Enter database host [$DEFAULT_DB_HOST]: " DB_HOST - DB_HOST=${DB_HOST:-$DEFAULT_DB_HOST} - - # Prompt for database system root or another privileged user's credentials - echo - read -p "Enter $DB_SYSTEM admin user [$DEFAULT_DB_ADMIN]: " DB_ADMIN - DB_ADMIN=${DB_ADMIN:-$DEFAULT_DB_ADMIN} - read -sp "Enter $DB_SYSTEM admin password: " DB_ADMIN_PASS - echo - - # Confirm before proceeding - echo - echo "You are about to delete the database \"$DB_NAME\"." - read -p "Are you sure you want to proceed? (y/N): " confirm - if [[ ! "$confirm" =~ ^[Yy]$ ]]; then - echo "Operation cancelled." - exit 1 - fi - - # Execute commands for MySQL or PostgreSQL - if [ "$DB_SYSTEM" == "mysql" ]; then - MYSQL_PWD="$DB_ADMIN_PASS" mysql -u "$DB_ADMIN" -h "$DB_HOST" <