From c35cd00ba462c7372fb19501305a05a5905c60ec Mon Sep 17 00:00:00 2001 From: icenine451 Date: Mon, 20 Mar 2023 09:23:04 -0400 Subject: [PATCH] Add additional CLI input validation --- emu-configs/defaults/retrodeck/input_validation.cfg | 5 +++++ functions.sh | 11 +++++++++++ global.sh | 1 + retrodeck.sh | 5 ++++- 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 emu-configs/defaults/retrodeck/input_validation.cfg diff --git a/emu-configs/defaults/retrodeck/input_validation.cfg b/emu-configs/defaults/retrodeck/input_validation.cfg new file mode 100644 index 00000000..5c0a35e7 --- /dev/null +++ b/emu-configs/defaults/retrodeck/input_validation.cfg @@ -0,0 +1,5 @@ +uuddlrlrstart^set_setting_value /var/config/retrodeck/retrodeck.cfg developer_options true retrodeck +uuddlrlrstart^echo Visit the Configurator to behold your new-found powers. +uuddlrlrstart^echo But beware, with great power comes great responsibility... +gameovermangameover^set_setting_value /var/config/retrodeck/retrodeck.cfg developer_options false retrodeck +gameovermangameover^echo You have relinquished your powers in the name of saftey. \ No newline at end of file diff --git a/functions.sh b/functions.sh index 56158710..40f161a6 100644 --- a/functions.sh +++ b/functions.sh @@ -631,6 +631,17 @@ check_network_connectivity() { fi } +validate_input() { + while IFS="^" read -r input action + do + if [[ "$input" == "$1" ]]; then + # $action line must be completely literal in the $input_validation file. No shell expansion or extra characters. + $action + input_validated="true" + fi + done < $input_validation +} + update_rd_conf() { # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. # USAGE: update_rd_conf diff --git a/global.sh b/global.sh index 0f29dfc2..472ed4c0 100755 --- a/global.sh +++ b/global.sh @@ -13,6 +13,7 @@ rd_update_patch="/var/config/retrodeck/rd_update.patch" bios_checklist="$emuconfigs/defaults/retrodeck/bios_checklist.cfg" # A config file listing BIOS file information that can be verified compression_targets="$emuconfigs/defaults/retrodeck/compression_targets.cfg" # A config file containing supported compression types per system easter_egg_checklist="$emuconfigs/defaults/retrodeck/easter_egg_checklist.cfg" # A config file listing days and times when special splash screens should show up +input_validation="$emuconfigs/defaults/retrodeck/input_validation.cfg" # List of valid CLI inputs splashscreen_dir="/var/config/emulationstation/.emulationstation/resources/graphics/extra-splashes" # The default location of extra splash screens current_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash.svg" # The active splash file that will be shown on boot default_splash_file="/var/config/emulationstation/.emulationstation/resources/graphics/splash-orig.svg" # The default RetroDECK splash screen diff --git a/retrodeck.sh b/retrodeck.sh index 634c38b7..8cf77def 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -96,7 +96,10 @@ https://retrodeck.net exit 1 ;; *) - echo "Please specify a valid option. Use -h for more information." + validate_input "$i" + if [[ ! $input_validated == "true" ]]; then + echo "Please specify a valid option. Use -h for more information." + fi ;; esac done