Skip to content

Commit 4386430

Browse files
committed
feat(serverutils): improve TUI UX, arg handling, and script execution safety
1 parent bff22b4 commit 4386430

File tree

8 files changed

+61
-15
lines changed

8 files changed

+61
-15
lines changed

Scripts/doctor.sh

100644100755
File mode changed.

Scripts/install/install.sh

100644100755
File mode changed.

Scripts/motd/collect.sh

100644100755
File mode changed.

Scripts/motd/solen-motd.sh

100644100755
File mode changed.

Scripts/recover.sh

100644100755
File mode changed.

Scripts/security/ssh-audit.sh

100644100755
File mode changed.

Scripts/shell/setup.sh

100644100755
File mode changed.

serverutils

Lines changed: 61 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -297,9 +297,28 @@ cmd_home() {
297297
printf "Enter key/name to run (blank to return): "
298298
read -r runkey
299299
if [[ -n "$runkey" ]]; then
300-
printf "Extra args (after --), or blank: "
301-
read -r extra
302-
if [[ -n "$extra" ]]; then cmd_run "$runkey" -- $extra; else cmd_run "$runkey"; fi
300+
# Pre-resolve here to surface ambiguities before asking for extra args
301+
local candidates chosen
302+
candidates="$(resolve_script_by_key_or_name "$runkey")"
303+
if [[ -z "$candidates" ]]; then
304+
echoerr "No matches for '$runkey'"
305+
:
306+
elif [[ "$(printf '%s\n' "$candidates" | wc -l)" -gt 1 ]]; then
307+
chosen="$(printf '%s\n' "$candidates" | choose_interactively)" || chosen=""
308+
if [[ -z "$chosen" ]]; then
309+
echowarn "Selection canceled"
310+
:
311+
else
312+
printf "Extra args (after --), or blank: "
313+
read -r extra
314+
if [[ -n "$extra" ]]; then cmd_run "$chosen" -- $extra || true; else cmd_run "$chosen" || true; fi
315+
fi
316+
else
317+
chosen="$candidates"
318+
printf "Extra args (after --), or blank: "
319+
read -r extra
320+
if [[ -n "$extra" ]]; then cmd_run "$chosen" -- $extra || true; else cmd_run "$chosen" || true; fi
321+
fi
303322
fi
304323
;;
305324
2)
@@ -308,25 +327,47 @@ cmd_home() {
308327
if [[ -n "$q" ]]; then
309328
resolved="$(resolve_script_by_key_or_name "$q")"
310329
if [[ -z "$resolved" ]]; then echoerr "No matches"; else
311-
chosen="$(printf '%s\n' "$resolved" | choose_interactively)"
312-
[[ -n "$chosen" ]] && cmd_run "$chosen"
330+
chosen="$(printf '%s\n' "$resolved" | choose_interactively)" || chosen=""
331+
if [[ -n "$chosen" ]]; then
332+
printf "Extra args (after --), or blank: "
333+
read -r extra
334+
if [[ -n "$extra" ]]; then cmd_run "$chosen" -- $extra || true; else cmd_run "$chosen" || true; fi
335+
else
336+
echowarn "Selection canceled"
337+
fi
313338
fi
314339
fi
315340
;;
316341
r|R)
317342
printf "Enter key/name to run: "
318343
read -r runkey
319344
if [[ -n "$runkey" ]]; then
320-
printf "Extra args (after --), or blank: "
321-
read -r extra
322-
if [[ -n "$extra" ]]; then cmd_run "$runkey" -- $extra; else cmd_run "$runkey"; fi
345+
local candidates chosen
346+
candidates="$(resolve_script_by_key_or_name "$runkey")"
347+
if [[ -z "$candidates" ]]; then
348+
echoerr "No matches for '$runkey'"
349+
elif [[ "$(printf '%s\n' "$candidates" | wc -l)" -gt 1 ]]; then
350+
chosen="$(printf '%s\n' "$candidates" | choose_interactively)" || chosen=""
351+
if [[ -z "$chosen" ]]; then
352+
echowarn "Selection canceled"
353+
else
354+
printf "Extra args (after --), or blank: "
355+
read -r extra
356+
if [[ -n "$extra" ]]; then cmd_run "$chosen" -- $extra || true; else cmd_run "$chosen" || true; fi
357+
fi
358+
else
359+
chosen="$candidates"
360+
printf "Extra args (after --), or blank: "
361+
read -r extra
362+
if [[ -n "$extra" ]]; then cmd_run "$chosen" -- $extra || true; else cmd_run "$chosen" || true; fi
363+
fi
323364
fi
324365
;;
325-
3) cmd_run health/check; ;;
326-
4) cmd_run system-maintenance/update-and-report -- --dry-run; ;;
327-
5) cmd_install_runner --user; ;;
328-
6) cmd_overview; ;;
329-
7) cmd_setup_motd; ;;
366+
3) cmd_run health/check || true; ;;
367+
4) cmd_run system-maintenance/update-and-report -- --dry-run || true; ;;
368+
5) cmd_install_runner --user || true; ;;
369+
6) cmd_overview || true; ;;
370+
7) cmd_setup_motd || true; ;;
330371
q|Q|"" ) break ;;
331372
*) echoerr "Unknown choice" ;;
332373
esac
@@ -403,10 +444,14 @@ choose_interactively() {
403444
printf " [%d] %s (%s)\n" "$i" "$key" "$it"
404445
i=$((i+1))
405446
done
406-
printf "Select [1-%d]: " "$count"
447+
printf "Select [1-%d] (blank cancels): " "$count"
407448
local sel
408449
read -r sel
409-
if [[ -z "$sel" ]] || ! [[ "$sel" =~ ^[0-9]+$ ]] || (( sel < 1 || sel > count )); then
450+
if [[ -z "$sel" ]]; then
451+
echowarn "Selection canceled"
452+
return 2
453+
fi
454+
if ! [[ "$sel" =~ ^[0-9]+$ ]] || (( sel < 1 || sel > count )); then
410455
echoerr "Invalid selection"
411456
return 2
412457
fi
@@ -951,6 +996,7 @@ main() {
951996
if [[ $no_policy -eq 1 ]]; then env_prefix+=" SOLEN_POLICY=/dev/null"; fi
952997
# try both flags and env
953998
set +e
999+
[[ -x "$f" ]] || chmod +x "$f" 2>/dev/null || true
9541000
out=$(eval "$env_prefix" "$f" --json --dry-run 2>/dev/null)
9551001
rc=$?
9561002
set -e

0 commit comments

Comments
 (0)