aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbeepzone-helper.sh208
1 files changed, 144 insertions, 64 deletions
diff --git a/beepzone-helper.sh b/beepzone-helper.sh
index 40c1102..0383e82 100755
--- a/beepzone-helper.sh
+++ b/beepzone-helper.sh
@@ -78,6 +78,9 @@ if command -v git >/dev/null 2>&1; then
HAS_GIT=true
fi
+# Selected DB target for user/role and imports
+DB_TARGET=""
+
TMP_FILE="$(mktemp)"
CHOICE_FILE="$(mktemp)"
trap 'rm -f "$TMP_FILE" "$CHOICE_FILE"' EXIT
@@ -124,6 +127,60 @@ DEPLOYMENT_TYPE="$DEPLOYMENT_TYPE"
EOF
}
+choose_db_target() {
+ local prompt native_available
+ prompt="${1:-Select where to run the DB operation}"
+ native_available=false
+ if $IS_DEBIAN_NATIVE && [[ -n "$MYSQL_CLIENT" ]]; then
+ native_available=true
+ fi
+
+ if $HAS_PODMAN && $native_available; then
+ $DIALOG --menu "$prompt" 14 70 2 \
+ podman "Podman container: $BEEPZONE_DB_CONTAINER_NAME" \
+ native "Native MariaDB/MySQL (using $MYSQL_CLIENT)" 2>"$CHOICE_FILE" || return 1
+ cat "$CHOICE_FILE"
+ return 0
+ elif $HAS_PODMAN; then
+ echo "podman"
+ return 0
+ elif $native_available; then
+ echo "native"
+ return 0
+ else
+ "$DIALOG" --msgbox "No database target available.\n\nNative is only supported on Debian 12/13 with a MariaDB/MySQL client.\nInstall podman or meet the native requirements." 12 74
+ return 1
+ fi
+}
+
+db_query() {
+ local sql="$1"; local target="${2:-$DB_TARGET}"
+ if [[ -z "$target" ]]; then
+ echo "DB target not set" >&2; return 1
+ fi
+ if [[ "$target" == "podman" ]]; then
+ podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
+ mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" \
+ -e "$sql" -s -N
+ else
+ "$MYSQL_CLIENT" -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" \
+ -e "$sql" -s -N
+ fi
+}
+
+db_exec_sql() {
+ local sql="$1"; local target="${2:-$DB_TARGET}"
+ if [[ -z "$target" ]]; then
+ echo "DB target not set" >&2; return 1
+ fi
+ if [[ "$target" == "podman" ]]; then
+ echo "$sql" | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
+ mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME"
+ else
+ echo "$sql" | "$MYSQL_CLIENT" -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME"
+ fi
+}
+
show_capabilities_screen() {
local cf
cf="$(mktemp)"
@@ -360,6 +417,9 @@ configure_and_run_native_db() {
}
import_schema_and_seed() {
+ local target
+ target=$(choose_db_target "Where should the import be applied?") || return
+
local import_type schema_file full_dump_file
schema_file="$WORK_DIR/backend/database/schema/beepzone-schema-dump.sql"
full_dump_file="$WORK_DIR/backend/database/dev/beepzone-full-dump.sql"
@@ -382,19 +442,34 @@ import_schema_and_seed() {
$DIALOG --yesno "import full database dump from:\n$full_dump_file\n\nThis will DROP and recreate the database.\n\nYou Sure?" 12 70 || return
- {
- echo "DROP DATABASE IF EXISTS \`$DB_NAME\`;"
- echo "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;"
- echo "USE \`$DB_NAME\`;"
- echo "SET FOREIGN_KEY_CHECKS=0;"
- cat "$full_dump_file"
- echo "SET FOREIGN_KEY_CHECKS=1;"
- } | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" >>"$LOG_FILE" 2>&1 || {
- error_log=$(tail -30 "$LOG_FILE")
- $DIALOG --title "Fuck" --msgbox "full dump import failed.\n\nError:\n${error_log}" 22 76
- return
- }
+ if [[ "$target" == "podman" ]]; then
+ {
+ echo "DROP DATABASE IF EXISTS \`$DB_NAME\`;"
+ echo "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;"
+ echo "USE \`$DB_NAME\`;"
+ echo "SET FOREIGN_KEY_CHECKS=0;"
+ cat "$full_dump_file"
+ echo "SET FOREIGN_KEY_CHECKS=1;"
+ } | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
+ mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -30 "$LOG_FILE")
+ $DIALOG --title "Fuck" --msgbox "full dump import failed.\n\nError:\n${error_log}" 22 76
+ return
+ }
+ else
+ {
+ echo "DROP DATABASE IF EXISTS \`$DB_NAME\`;"
+ echo "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;"
+ echo "USE \`$DB_NAME\`;"
+ echo "SET FOREIGN_KEY_CHECKS=0;"
+ cat "$full_dump_file"
+ echo "SET FOREIGN_KEY_CHECKS=1;"
+ } | "$MYSQL_CLIENT" -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -30 "$LOG_FILE")
+ $DIALOG --title "Fuck" --msgbox "full dump import failed.\n\nError:\n${error_log}" 22 76
+ return
+ }
+ fi
DEPLOYMENT_TYPE="dev"
save_env
@@ -409,19 +484,34 @@ import_schema_and_seed() {
$DIALOG --yesno "import clean schema from:\n$schema_file\n\nThis will DROP and recreate the database.\n\nProceed?" 12 70 || return
- {
- echo "DROP DATABASE IF EXISTS \`$DB_NAME\`;"
- echo "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;"
- echo "USE \`$DB_NAME\`;"
- echo "SET FOREIGN_KEY_CHECKS=0;"
- cat "$schema_file"
- echo "SET FOREIGN_KEY_CHECKS=1;"
- } | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" >>"$LOG_FILE" 2>&1 || {
- error_log=$(tail -30 "$LOG_FILE")
- $DIALOG --title "Error" --msgbox "schema import failed.\n\nError:\n${error_log}" 22 76
- return
- }
+ if [[ "$target" == "podman" ]]; then
+ {
+ echo "DROP DATABASE IF EXISTS \`$DB_NAME\`;"
+ echo "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;"
+ echo "USE \`$DB_NAME\`;"
+ echo "SET FOREIGN_KEY_CHECKS=0;"
+ cat "$schema_file"
+ echo "SET FOREIGN_KEY_CHECKS=1;"
+ } | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
+ mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -30 "$LOG_FILE")
+ $DIALOG --title "Error" --msgbox "schema import failed.\n\nError:\n${error_log}" 22 76
+ return
+ }
+ else
+ {
+ echo "DROP DATABASE IF EXISTS \`$DB_NAME\`;"
+ echo "CREATE DATABASE \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;"
+ echo "USE \`$DB_NAME\`;"
+ echo "SET FOREIGN_KEY_CHECKS=0;"
+ cat "$schema_file"
+ echo "SET FOREIGN_KEY_CHECKS=1;"
+ } | "$MYSQL_CLIENT" -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -30 "$LOG_FILE")
+ $DIALOG --title "Error" --msgbox "schema import failed.\n\nError:\n${error_log}" 22 76
+ return
+ }
+ fi
DEPLOYMENT_TYPE="clean"
save_env
@@ -430,6 +520,8 @@ import_schema_and_seed() {
}
manage_users_and_roles() {
+ DB_TARGET=$(choose_db_target "Apply user/role management to which database?") || return
+
while true; do
$DIALOG --clear \
--title "Manage Users & Roles" \
@@ -481,11 +573,10 @@ create_role() {
local sql="INSERT INTO roles (name, power) VALUES ('$name', $power);"
- echo "$sql" | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" >>"$LOG_FILE" 2>&1 || {
- error_log=$(tail -20 "$LOG_FILE")
- $DIALOG --title "Error" --msgbox "Failed to create role.\n\nError:\n${error_log}" 20 76
- return 1
+ db_exec_sql "$sql" "$DB_TARGET" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -20 "$LOG_FILE")
+ $DIALOG --title "Error" --msgbox "Failed to create role.\n\nError:\n${error_log}" 20 76
+ return 1
}
$DIALOG --msgbox "Role '$name' created successfully!" 8 50
@@ -494,11 +585,9 @@ create_role() {
delete_role() {
# Fetch roles from the database
local roles_list
- roles_list=$(podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" \
- -e "SELECT id, name, power FROM roles ORDER BY power DESC;" -s -N 2>>"$LOG_FILE") || {
- $DIALOG --msgbox "Failed to fetch roles from database." 10 60
- return
+ roles_list=$(db_query "SELECT id, name, power FROM roles ORDER BY power DESC;" "$DB_TARGET" 2>>"$LOG_FILE") || {
+ $DIALOG --msgbox "Failed to fetch roles from database." 10 60
+ return
}
# Build role selection menu
@@ -523,9 +612,7 @@ delete_role() {
# Check if any users are using this role
local user_count
- user_count=$(podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" \
- -e "SELECT COUNT(*) FROM users WHERE role_id = $selected_role_id;" -s -N 2>>"$LOG_FILE")
+ user_count=$(db_query "SELECT COUNT(*) FROM users WHERE role_id = $selected_role_id;" "$DB_TARGET" 2>>"$LOG_FILE")
if [[ "$user_count" -gt 0 ]]; then
$DIALOG --msgbox "Cannot delete role '$selected_role_name'.\n$user_count user(s) are currently assigned this role." 10 60
@@ -538,11 +625,10 @@ delete_role() {
# Delete role
local sql="DELETE FROM roles WHERE id = $selected_role_id;"
- echo "$sql" | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" >>"$LOG_FILE" 2>&1 || {
- error_log=$(tail -20 "$LOG_FILE")
- $DIALOG --title "Error" --msgbox "Failed to delete role.\n\nError:\n${error_log}" 20 76
- return
+ db_exec_sql "$sql" "$DB_TARGET" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -20 "$LOG_FILE")
+ $DIALOG --title "Error" --msgbox "Failed to delete role.\n\nError:\n${error_log}" 20 76
+ return
}
$DIALOG --msgbox "Role '$selected_role_name' deleted successfully!" 8 60
@@ -551,11 +637,9 @@ delete_role() {
create_user() {
# Get available roles
local roles_list
- roles_list=$(podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" \
- -e "SELECT id, name, power FROM roles ORDER BY power DESC;" -s -N 2>>"$LOG_FILE") || {
- $DIALOG --msgbox "Failed to fetch roles from database.\nEnsure schema is imported and roles exist." 10 60
- return
+ roles_list=$(db_query "SELECT id, name, power FROM roles ORDER BY power DESC;" "$DB_TARGET" 2>>"$LOG_FILE") || {
+ $DIALOG --msgbox "Failed to fetch roles from database.\nEnsure schema is imported and roles exist." 10 60
+ return
}
# Build role selection menu
@@ -621,11 +705,10 @@ create_user() {
[[ -n "$phone" ]] && sql+="'$phone'" || sql+="NULL"
sql+=", 1);"
- echo "$sql" | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" >>"$LOG_FILE" 2>&1 || {
- error_log=$(tail -20 "$LOG_FILE")
- $DIALOG --title "Error" --msgbox "Failed to create user.\n\nError:\n${error_log}" 20 76
- return
+ db_exec_sql "$sql" "$DB_TARGET" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -20 "$LOG_FILE")
+ $DIALOG --title "Error" --msgbox "Failed to create user.\n\nError:\n${error_log}" 20 76
+ return
}
$DIALOG --msgbox "User '$username' created successfully!" 8 60
@@ -634,11 +717,9 @@ create_user() {
delete_user() {
# Fetch users from the database
local users_list
- users_list=$(podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" \
- -e "SELECT id, username, name FROM users ORDER BY id;" -s -N 2>>"$LOG_FILE") || {
- $DIALOG --msgbox "Failed to fetch users from database." 10 60
- return
+ users_list=$(db_query "SELECT id, username, name FROM users ORDER BY id;" "$DB_TARGET" 2>>"$LOG_FILE") || {
+ $DIALOG --msgbox "Failed to fetch users from database." 10 60
+ return
}
# Build user selection menu
@@ -667,11 +748,10 @@ delete_user() {
# Delete user
local sql="DELETE FROM users WHERE id = $selected_user_id;"
- echo "$sql" | podman exec -i "$BEEPZONE_DB_CONTAINER_NAME" \
- mariadb -h"$DB_HOST" -P"$DB_PORT" -uroot -p"$DB_ROOT_PASSWORD" "$DB_NAME" >>"$LOG_FILE" 2>&1 || {
- error_log=$(tail -20 "$LOG_FILE")
- $DIALOG --title "Error" --msgbox "Failed to delete user.\n\nError:\n${error_log}" 20 76
- return
+ db_exec_sql "$sql" "$DB_TARGET" >>"$LOG_FILE" 2>&1 || {
+ error_log=$(tail -20 "$LOG_FILE")
+ $DIALOG --title "Error" --msgbox "Failed to delete user.\n\nError:\n${error_log}" 20 76
+ return
}
$DIALOG --msgbox "User '$selected_username' deleted successfully!" 8 60