diff options
| author | UMTS at Teleco <crt@teleco.ch> | 2026-01-11 20:35:55 +0100 |
|---|---|---|
| committer | UMTS at Teleco <crt@teleco.ch> | 2026-01-11 20:35:55 +0100 |
| commit | a57dbcda73399a7d04e154763dfc303e3f14b3a5 (patch) | |
| tree | 31e1623947cd905290d8eaaaa0c57f4169763f86 /beepzone-helper.sh | |
| parent | a0a914ac5138cbb93660d366984b5bf52823de06 (diff) | |
ughhhh
Diffstat (limited to 'beepzone-helper.sh')
| -rwxr-xr-x | beepzone-helper.sh | 208 |
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 |
