Standardize bot-analyzer.sh menu validation and improve input handling
IMPROVEMENTS: - Added strict input validation for time range selection (1-8) with retry loop - Added strict input validation for user scope selection (1-2) with retry loop - Enhanced custom hours/days input validation with positive number check - Removed silent fallback (wildcard case) that accepted invalid input - Added explicit break statements for all valid menu selections - Improved error messages for invalid numeric input VALIDATION DETAILS: - Time range: Only accepts 1-8, rejects invalid input with clear error, retries - Custom hours: Must be positive numeric value, validates range - Custom days: Must be positive numeric value, validates range - User scope: Only accepts 1-2, rejects invalid input with clear error, retries MENU STANDARDS COMPLIANCE: ✓ Input validation (CRITICAL) - strict numeric range checking ✓ Default values (uses "All" when not specified) ✓ Color codes (already had - GREEN format) ✓ Error messages on invalid input (IMPORTANT) ✓ Retry logic for failed validation (IMPORTANT) Lines modified: ~40 (enhanced validation logic) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -118,35 +118,47 @@ prompt_time_range() {
|
|||||||
echo -e " ${GREEN}7)${NC} Custom hours"
|
echo -e " ${GREEN}7)${NC} Custom hours"
|
||||||
echo -e " ${GREEN}8)${NC} Custom days"
|
echo -e " ${GREEN}8)${NC} Custom days"
|
||||||
echo ""
|
echo ""
|
||||||
read -p "Select time range (1-8): " time_choice
|
|
||||||
|
|
||||||
case $time_choice in
|
# Validate time_choice input with retry loop
|
||||||
1) ;; # All logs - no filter
|
while true; do
|
||||||
2) HOURS_BACK=1 ;;
|
read -p "Select time range (1-8): " time_choice
|
||||||
3) HOURS_BACK=6 ;;
|
|
||||||
4) HOURS_BACK=24 ;;
|
if ! [[ "$time_choice" =~ ^[1-8]$ ]]; then
|
||||||
5) DAYS_BACK=7 ;;
|
print_error "Invalid choice. Please enter 1-8"
|
||||||
6) DAYS_BACK=30 ;;
|
continue
|
||||||
7)
|
fi
|
||||||
read -p "Enter number of hours: " custom_hours
|
|
||||||
if [[ "$custom_hours" =~ ^[0-9]+$ ]]; then
|
case $time_choice in
|
||||||
HOURS_BACK=$custom_hours
|
1) break ;; # All logs - no filter
|
||||||
else
|
2) HOURS_BACK=1; break ;;
|
||||||
print_error "Invalid input, using all logs"
|
3) HOURS_BACK=6; break ;;
|
||||||
fi
|
4) HOURS_BACK=24; break ;;
|
||||||
;;
|
5) DAYS_BACK=7; break ;;
|
||||||
8)
|
6) DAYS_BACK=30; break ;;
|
||||||
read -p "Enter number of days: " custom_days
|
7)
|
||||||
if [[ "$custom_days" =~ ^[0-9]+$ ]]; then
|
while true; do
|
||||||
DAYS_BACK=$custom_days
|
read -p "Enter number of hours: " custom_hours
|
||||||
else
|
if [[ "$custom_hours" =~ ^[0-9]+$ ]] && [ "$custom_hours" -gt 0 ]; then
|
||||||
print_error "Invalid input, using all logs"
|
HOURS_BACK=$custom_hours
|
||||||
fi
|
break 2 # Break out of both loops
|
||||||
;;
|
else
|
||||||
*)
|
print_error "Invalid input. Please enter a positive number"
|
||||||
print_warning "Invalid choice, using all logs"
|
fi
|
||||||
;;
|
done
|
||||||
esac
|
;;
|
||||||
|
8)
|
||||||
|
while true; do
|
||||||
|
read -p "Enter number of days: " custom_days
|
||||||
|
if [[ "$custom_days" =~ ^[0-9]+$ ]] && [ "$custom_days" -gt 0 ]; then
|
||||||
|
DAYS_BACK=$custom_days
|
||||||
|
break 2 # Break out of both loops
|
||||||
|
else
|
||||||
|
print_error "Invalid input. Please enter a positive number"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
prompt_user_scope() {
|
prompt_user_scope() {
|
||||||
@@ -156,15 +168,25 @@ prompt_user_scope() {
|
|||||||
echo -e " ${GREEN}1)${NC} All users (system-wide analysis)"
|
echo -e " ${GREEN}1)${NC} All users (system-wide analysis)"
|
||||||
echo -e " ${GREEN}2)${NC} Specific user"
|
echo -e " ${GREEN}2)${NC} Specific user"
|
||||||
echo ""
|
echo ""
|
||||||
read -p "Select option (1-2): " user_choice
|
|
||||||
|
|
||||||
if [ "$user_choice" = "2" ]; then
|
# Validate user_choice input with retry loop
|
||||||
echo ""
|
while true; do
|
||||||
local selected=$(select_user_interactive "Select user to analyze")
|
read -p "Select option (1-2): " user_choice
|
||||||
if [ $? -eq 0 ] && [ "$selected" != "ALL" ]; then
|
|
||||||
FILTER_USER="$selected"
|
if ! [[ "$user_choice" =~ ^[1-2]$ ]]; then
|
||||||
|
print_error "Invalid choice. Please enter 1 or 2"
|
||||||
|
continue
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
|
if [ "$user_choice" = "2" ]; then
|
||||||
|
echo ""
|
||||||
|
local selected=$(select_user_interactive "Select user to analyze")
|
||||||
|
if [ $? -eq 0 ] && [ "$selected" != "ALL" ]; then
|
||||||
|
FILTER_USER="$selected"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
break
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
# Interactive prompts for missing options
|
# Interactive prompts for missing options
|
||||||
|
|||||||
Reference in New Issue
Block a user