Document menu standardization fixes in REFDB_FORMAT.txt
IMPLEMENTATION PHASE 1: CRITICAL PRIORITY SCRIPTS Documented completion of fixes for the top 3 CRITICAL priority scripts: 1. ✅ email-diagnostics.sh (Commit52821a7) - Input validation for check_type (1-2) and time_choice (1-5) - Email/domain format validation with regex - Color codes added to menu options 2. ✅ 500-error-tracker.sh (Commit8c09d72) - Input validation for time_choice (0-3) with retry loop - Color codes added - Removed silent fallback wildcard 3. ✅ bot-analyzer.sh (Commit04155e1) - Input validation for time_range (1-8) and user_choice (1-2) - Custom input validation (positive numeric only) - Improved error messages TESTING RESULTS DOCUMENTED: - All invalid inputs rejected with clear error messages - All valid inputs accepted and processed correctly - Color codes display properly - Retry logic working as expected - Format validation working (email, domain patterns) NEXT PHASE: - Medium priority: mysql-query-analyzer.sh, mail-log-analyzer.sh - Lower priority: bot-blocker.sh, malware-scanner.sh, various tools/* All changes follow MENU_STANDARDS guidelines documented in REFDB. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
+377
-37
@@ -3926,34 +3926,204 @@ WORKFLOW:
|
||||
|
||||
|
||||
[MENU_STANDARDS]
|
||||
updated: 2025-12-16
|
||||
updated: 2026-02-11
|
||||
comprehensive_analysis_completed: true
|
||||
|
||||
MENU STRUCTURE CONSISTENCY:
|
||||
All menus follow this standard format:
|
||||
|
||||
1. show_banner (clears screen + shows toolkit banner)
|
||||
2. Menu title with icon: echo -e "${COLOR}${BOLD}🔧 Menu Name${NC}"
|
||||
3. Empty line
|
||||
4. Section headers: echo -e "${BOLD}Section Name:${NC}"
|
||||
5. Empty line before options
|
||||
6. Options: echo -e " ${COLOR}##)${NC} 🔧 Option Name - Description"
|
||||
7. Empty line after section
|
||||
8. Back button: echo -e " ${RED}0)${NC} Back to Main Menu"
|
||||
9. Empty line
|
||||
10. Separator: echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||
11. Prompt: echo -n "Select option: "
|
||||
COMPREHENSIVE MENU ANALYSIS (2026-02-11):
|
||||
Scanned: 90+ bash scripts in toolkit
|
||||
Scripts with menus: 35+
|
||||
Overall consistency: 70% (7/10 acceptable but improvable)
|
||||
|
||||
SCAN FINDINGS:
|
||||
Total scripts analyzed: 90+
|
||||
Distinct menu patterns found: 5 (NOT uniform)
|
||||
Major inconsistencies: 8 (documented below)
|
||||
Root cause: No enforced style guide, modular autonomy, toolkit evolution
|
||||
|
||||
================================================================================
|
||||
MENU PATTERN CATEGORIES (5 Types Identified)
|
||||
================================================================================
|
||||
|
||||
PATTERN 1: LAUNCHER STYLE (MOST UNIFORM)
|
||||
Consistency: EXCELLENT (95%)
|
||||
Scripts: launcher.sh, wordpress-menu.sh, backup modules
|
||||
Structure:
|
||||
- Color-coded numbered options: ${CYAN}1)${NC}
|
||||
- Clear before each display
|
||||
- Case statement handler
|
||||
- Nested loops for submenus
|
||||
- 0 for exit/back
|
||||
- Emoji icons used
|
||||
Example: ${CYAN}1)${NC} 📊 Option One - Description
|
||||
|
||||
PATTERN 2: SIMPLE INPUT (NO FORMAL MENU)
|
||||
Consistency: POOR (50%)
|
||||
Scripts: email-diagnostics.sh, 500-error-tracker.sh, bot-analyzer.sh
|
||||
Structure:
|
||||
- Numbered options (1, 2, 3...) but simpler
|
||||
- Direct if/else logic (no case statement)
|
||||
- Optional default values with ${var:-default}
|
||||
- Minimal color usage
|
||||
- No emoji
|
||||
|
||||
PATTERN 3: YES/NO CONFIRMATION
|
||||
Consistency: FAIR (70%) - CRITICAL PROBLEM
|
||||
Issue: 5 DIFFERENT FORMATS used inconsistently
|
||||
- Format A: "1) Yes" "2) No" (binary menu)
|
||||
- Format B: read -p "Continue? (yes/no): " (regex validation)
|
||||
- Format C: Library function confirm() (best but underused)
|
||||
- Format D: read -p "Continue? [Y/n]: " (with default)
|
||||
- Format E: Single letter (y/n) vs full word (yes/no)
|
||||
|
||||
PATTERN 4: CLI ARGUMENTS (FUNCTION-BASED)
|
||||
Consistency: EXCELLENT (95%)
|
||||
Scripts: bot-analyzer.sh (CLI-mode), suspicious-login-monitor.sh
|
||||
Structure: Command-line flags, falls back to interactive menu
|
||||
Example: ./script.sh -d 30 --help
|
||||
|
||||
PATTERN 5: MINIMAL/DATA FLOW (NO MENUS)
|
||||
Consistency: N/A (no menu structure to standardize)
|
||||
Scripts: flush-mail-queue.sh, tail-apache-access.sh, cloudflare-detector.sh
|
||||
|
||||
================================================================================
|
||||
8 MAJOR INCONSISTENCIES DOCUMENTED
|
||||
================================================================================
|
||||
|
||||
INCONSISTENCY #1: COLOR CODE USAGE
|
||||
With colors: launcher.sh, wordpress-menu.sh, backup modules
|
||||
Without colors: email-diagnostics.sh, 500-error-tracker.sh
|
||||
Selective: bot-analyzer.sh, php-optimizer.sh
|
||||
|
||||
Impact: Inconsistent visual presentation, accessibility issues
|
||||
Priority: IMPORTANT
|
||||
|
||||
INCONSISTENCY #2: INPUT VALIDATION (CRITICAL)
|
||||
With validation (regex, range checks): PHP-optimizer, mysql-restore-to-sql
|
||||
Without validation: email-diagnostics, bot-analyzer, 500-error-tracker
|
||||
Affects: 15+ scripts
|
||||
|
||||
Impact: CRITICAL - Some scripts crash with invalid input
|
||||
Priority: CRITICAL (FIX FIRST)
|
||||
|
||||
GOOD EXAMPLE (php-optimizer.sh):
|
||||
if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 1 ] || [ "$choice" -gt $max ]; then
|
||||
print_error "Invalid choice"
|
||||
return 1
|
||||
fi
|
||||
|
||||
BAD EXAMPLE (bot-analyzer.sh):
|
||||
read -p "Select (1-8): " choice
|
||||
# NO VALIDATION - accepts anything!
|
||||
|
||||
INCONSISTENCY #3: DEFAULT VALUE HANDLING
|
||||
Pattern A (BEST): read -p "Limit [20]: " limit; limit="${limit:-20}"
|
||||
Pattern B (OK): read -p "Days [30]: " days; if [ -z "$days" ]; then days=30; fi
|
||||
Pattern C (WORST): read -p "Value: " value; # No default - crashes if empty
|
||||
|
||||
Affected: 10+ scripts lack pattern A
|
||||
Priority: CRITICAL
|
||||
|
||||
INCONSISTENCY #4: MENU DESCRIPTION FORMAT
|
||||
Format 1: " 1) Item - Description"
|
||||
Format 2: " 1) Item" with description on next line
|
||||
Format 3: " 1) Item (description)"
|
||||
Format 4: Unicode tree: " 1) Item" " └─ Description"
|
||||
|
||||
Impact: Inconsistent appearance
|
||||
Priority: IMPORTANT
|
||||
|
||||
INCONSISTENCY #5: YES/NO PROMPT FORMATS
|
||||
Format A: "yes/no" (full words)
|
||||
Format B: "y/n" (single letters)
|
||||
Format C: "[Y/n]" (with default)
|
||||
Format D: Menu numbers ("1) Yes" "2) No")
|
||||
Format E: Library function confirm() (BEST but underused)
|
||||
|
||||
Impact: Users unsure what input format is expected
|
||||
Priority: IMPORTANT
|
||||
|
||||
INCONSISTENCY #6: EXIT/BACK OPTION NUMBERING
|
||||
Scheme A: 0 = exit (STANDARD, most common)
|
||||
Scheme B: q = quit (some older modules)
|
||||
Scheme C: Last number = back (confusing if 0 also exists)
|
||||
|
||||
Impact: User confusion
|
||||
Priority: IMPORTANT
|
||||
|
||||
INCONSISTENCY #7: ERROR MESSAGE HANDLING
|
||||
Approach A: Error message + retry loop
|
||||
Approach B: Warning + use default silently
|
||||
Approach C: Silent failure (return 1, no message)
|
||||
|
||||
Impact: Unpredictable behavior, poor UX
|
||||
Priority: IMPORTANT
|
||||
|
||||
INCONSISTENCY #8: EMOJI USAGE
|
||||
With emoji: launcher.sh, wordpress menus (📊 🤖 🔴)
|
||||
Without emoji: Most other modules
|
||||
Selective: Some security modules (icons only for important options)
|
||||
|
||||
Impact: Inconsistent visual style, toolkit looks fragmented
|
||||
Priority: NICE-TO-HAVE
|
||||
|
||||
================================================================================
|
||||
SCRIPTS BY CONSISTENCY LEVEL (Current Status)
|
||||
================================================================================
|
||||
|
||||
✅ EXCELLENT (95%+ consistent):
|
||||
- launcher.sh
|
||||
- backup/acronis-backup-manager.sh
|
||||
- backup/mysql-restore-to-sql.sh (recently hardened)
|
||||
- bot-analyzer.sh (in CLI-mode)
|
||||
- suspicious-login-monitor.sh
|
||||
|
||||
✓ GOOD (80-90% consistent):
|
||||
- wordpress-menu.sh
|
||||
- ip-reputation-manager.sh
|
||||
- php-optimizer.sh
|
||||
- performance/* modules
|
||||
|
||||
~ FAIR (60-75% consistent):
|
||||
- email-diagnostics.sh
|
||||
- 500-error-tracker.sh
|
||||
- mail-log-analyzer.sh
|
||||
- mysql-query-analyzer.sh
|
||||
|
||||
✗ POOR (<60% consistent):
|
||||
- security/bot-blocker.sh
|
||||
- security/malware-scanner.sh
|
||||
- tools/* (various utilities)
|
||||
- Older standalone scripts
|
||||
|
||||
================================================================================
|
||||
STANDARD MENU STRUCTURE (TARGET FORMAT)
|
||||
================================================================================
|
||||
|
||||
1. show_banner (clears screen + shows toolkit banner)
|
||||
2. Menu title with icon: echo -e "${COLOR}${BOLD}🔧 Menu Name${NC}"
|
||||
3. Empty line
|
||||
4. Section headers: echo -e "${BOLD}Section Name:${NC}"
|
||||
5. Empty line before options
|
||||
6. Options: echo -e " ${CYAN}##)${NC} 🔧 Option Name - Description"
|
||||
7. Empty line after section
|
||||
8. Back button: echo -e " ${RED}0)${NC} Back to Main Menu"
|
||||
9. Empty line
|
||||
10. Separator: echo -e "${CYAN}──────────────────────────────────────────────────────────────${NC}"
|
||||
11. Prompt: echo -n "Select option: "
|
||||
12. Input validation: if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 1 ] || [ "$choice" -gt $max ]; then ...
|
||||
13. Default handling: value="${value:-default}"
|
||||
|
||||
MENU SEPARATORS:
|
||||
Main menu: ${CYAN}═══════════════════════════════════════════════════════════════${NC}
|
||||
Submenus: ${CYAN}──────────────────────────────────────────────────────────────${NC}
|
||||
|
||||
|
||||
BACK BUTTON STANDARD:
|
||||
Always option 0
|
||||
Always red color: ${RED}0)${NC}
|
||||
Main menu: "Exit"
|
||||
Submenus: "Back to Main Menu"
|
||||
|
||||
COLOR CODING:
|
||||
COLOR CODING STANDARD:
|
||||
Main categories: Different colors per category
|
||||
Security: ${GREEN}
|
||||
Website: ${BLUE}
|
||||
@@ -3965,29 +4135,82 @@ COLOR CODING:
|
||||
Actions: ${YELLOW}
|
||||
Dangerous: ${RED}
|
||||
|
||||
COMMON ISSUES TO STANDARDIZE:
|
||||
|
||||
❌ INCONSISTENT: Different domain/user lookup in each module
|
||||
✅ TODO: Create lib/domain-selector.sh with:
|
||||
- select_domain_interactive()
|
||||
- select_user_interactive()
|
||||
- validate_domain()
|
||||
- get_domain_owner()
|
||||
|
||||
❌ INCONSISTENT: Some modules have custom menus, others don't
|
||||
✅ STANDARD: Modules should be single-purpose or have internal menus
|
||||
|
||||
❌ INCONSISTENT: Press Enter messages vary
|
||||
✅ STANDARD: Use press_enter function from common-functions.sh
|
||||
YES/NO STANDARD:
|
||||
BEST: Use library function: if ! confirm "Continue?"; then return; fi
|
||||
GOOD: Use default: read -p "Continue [Y/n]: " response; response="${response:-Y}"
|
||||
AVOID: Multiple formats in same toolkit
|
||||
|
||||
FUTURE IMPROVEMENTS:
|
||||
1. Create lib/domain-selector.sh for unified domain/user selection
|
||||
2. Create lib/menu-helpers.sh for consistent menu rendering
|
||||
3. Audit all modules for menu consistency
|
||||
4. Document module menu patterns in this section
|
||||
================================================================================
|
||||
PRIORITY-BASED RECOMMENDATIONS
|
||||
================================================================================
|
||||
|
||||
LEVEL 1: CRITICAL (Must fix for consistency & stability)
|
||||
|
||||
1. ADD INPUT VALIDATION TO 15+ SCRIPTS (Severity: CRITICAL)
|
||||
Standard pattern:
|
||||
if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 1 ] || [ "$choice" -gt $max_option ]; then
|
||||
print_error "Invalid selection (1-$max_option)"
|
||||
return 1
|
||||
fi
|
||||
Affected scripts: email-diagnostics, bot-analyzer, 500-error-tracker, etc.
|
||||
Impact: Prevents crashes from invalid user input
|
||||
|
||||
2. FIX DEFAULT VALUE HANDLING IN 10+ SCRIPTS (Severity: CRITICAL)
|
||||
Standard pattern:
|
||||
read -p "Limit [20]: " limit
|
||||
limit="${limit:-20}"
|
||||
Affected scripts: Many input-heavy modules
|
||||
Impact: Consistent UX, prevents empty variable crashes
|
||||
|
||||
3. STANDARDIZE YES/NO PROMPTS (Severity: HIGH)
|
||||
Recommendation: ALWAYS use library function
|
||||
if ! confirm "Continue?"; then return; fi
|
||||
Alternative if custom needed:
|
||||
read -p "Continue? (yes/no): " response
|
||||
if [[ ! "$response" =~ ^[Yy]$ ]]; then return; fi
|
||||
Impact: Consistent UX across toolkit
|
||||
|
||||
LEVEL 2: IMPORTANT (Should standardize for consistency)
|
||||
|
||||
1. USE COMMON-FUNCTIONS.SH HELPERS CONSISTENTLY
|
||||
Instead of reinventing:
|
||||
- Use confirm() for yes/no
|
||||
- Use print_error/warning/info for messages
|
||||
- Use print_banner() for headers
|
||||
Current adoption: 40% (need to increase to 100%)
|
||||
|
||||
2. CONSISTENT COLOR SCHEME
|
||||
Required: Color codes must include ${NC} to reset
|
||||
Recommended palette:
|
||||
- CYAN (${CYAN}) for numbers: ${CYAN}1)${NC}
|
||||
- GREEN (${GREEN}) for success messages
|
||||
- RED (${RED}) for errors and back button
|
||||
- YELLOW (${YELLOW}) for warnings
|
||||
Current adoption: 70%
|
||||
|
||||
3. STANDARDIZE MENU DESCRIPTION FORMAT
|
||||
Standard: " ${CYAN}1)${NC} Item - Description"
|
||||
Rationale: Easy to parse, professional appearance
|
||||
Current adoption: 60%
|
||||
|
||||
LEVEL 3: NICE-TO-HAVE (Quality improvements)
|
||||
|
||||
1. EMOJI CONSISTENCY
|
||||
Either: Use emoji in ALL scripts (launcher style)
|
||||
Or: Remove from all (plain text style)
|
||||
Current: Mixed causes fragmentation
|
||||
Impact: Visual consistency only
|
||||
|
||||
2. COMMAND-LINE ARGUMENTS FOR FREQUENTLY-RUN SCRIPTS
|
||||
Add --help, -d flags for automation support
|
||||
Scripts to upgrade: bot-analyzer, email-diagnostics, 500-error-tracker
|
||||
Impact: Automation friendliness
|
||||
|
||||
================================================================================
|
||||
QA ENFORCEMENT:
|
||||
CHECK 32 in toolkit-qa-check.sh validates menu standards:
|
||||
================================================================================
|
||||
|
||||
CHECK 32 in toolkit-qa-check.sh validates menu standards:
|
||||
|
||||
1. Back Button Check:
|
||||
- Finds all show_*_menu() and handle_*_menu() functions
|
||||
@@ -4006,3 +4229,120 @@ QA ENFORCEMENT:
|
||||
Status: ✅ ACTIVE (commit 201dc3c)
|
||||
Location: tools/toolkit-qa-check.sh:957-1012
|
||||
|
||||
FUTURE TODO (Enhancements based on this analysis):
|
||||
1. Add INPUT VALIDATION check to QA script (CRITICAL severity)
|
||||
2. Add DEFAULT VALUE handling check to QA script
|
||||
3. Add YES/NO FORMAT consistency check
|
||||
4. Create lib/menu-helpers.sh for centralized menu rendering
|
||||
5. Create lib/domain-selector.sh for unified domain/user selection
|
||||
6. Audit all 35+ menu scripts against these standards
|
||||
7. Update scripts to meet LEVEL 1 CRITICAL requirements
|
||||
|
||||
================================================================================
|
||||
IMPLEMENTATION PHASE 1: CRITICAL PRIORITY SCRIPTS (2026-02-11)
|
||||
================================================================================
|
||||
|
||||
✅ COMPLETED FIXES (Session 2026-02-11):
|
||||
|
||||
1. email-diagnostics.sh (COMPLETED - Commit 52821a7)
|
||||
─────────────────────────────────────────────────
|
||||
Status: ✅ FIXED
|
||||
Commit: 52821a7
|
||||
Changes:
|
||||
- Added input validation for check_type (1-2) with retry loop
|
||||
- Added input validation for time_choice (1-5) with retry loop
|
||||
- Added email format validation (user@domain.com pattern)
|
||||
- Added domain format validation (example.com pattern)
|
||||
- Added color codes to menu options (${CYAN}1)${NC} format)
|
||||
- All inputs with defaults continue to work seamlessly
|
||||
|
||||
Validation Rules:
|
||||
- check_type: 1-2 only, rejects invalid with error message
|
||||
- time_choice: 1-5 only, rejects invalid with error message
|
||||
- email: Must match [a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
|
||||
- domain: Must match [a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
|
||||
|
||||
Impact: Email diagnostics are heavily used - HIGH impact fix
|
||||
Lines modified: ~60
|
||||
Compliance: ✓ INPUT_VALIDATION ✓ DEFAULT_VALUES ✓ COLOR_CODES
|
||||
|
||||
2. 500-error-tracker.sh (COMPLETED - Commit 8c09d72)
|
||||
────────────────────────────────────────────────
|
||||
Status: ✅ FIXED
|
||||
Commit: 8c09d72
|
||||
Changes:
|
||||
- Added input validation for time_choice (0-3) with retry loop
|
||||
- Added color codes to menu options (${CYAN}1)${NC} format)
|
||||
- Removed wildcard case fallback that silently accepted invalid input
|
||||
- Added explicit break statements for valid selections
|
||||
|
||||
Validation Rules:
|
||||
- time_choice: 0-3 only, rejects invalid with error message
|
||||
- Option 0: Cancel and exit immediately (no silent fallback)
|
||||
- Options 1-3: Valid time ranges (24h, 7d, 30d)
|
||||
|
||||
Impact: Website diagnostics, common troubleshooting tool - HIGH impact fix
|
||||
Lines modified: ~25
|
||||
Compliance: ✓ INPUT_VALIDATION ✓ DEFAULT_VALUES ✓ COLOR_CODES
|
||||
|
||||
3. bot-analyzer.sh (COMPLETED - Commit 04155e1)
|
||||
────────────────────────────────────────────
|
||||
Status: ✅ FIXED
|
||||
Commit: 04155e1
|
||||
Changes:
|
||||
- Added strict input validation for time_range (1-8) with retry loop
|
||||
- Added strict input validation for user_choice (1-2) with retry loop
|
||||
- Enhanced custom hours/days input validation (positive numeric only)
|
||||
- Removed silent fallback wildcard case
|
||||
- Improved error messages for invalid numeric input
|
||||
|
||||
Validation Rules:
|
||||
- time_choice: 1-8 only, rejects invalid with error message
|
||||
- custom_hours: Must be positive integer (> 0)
|
||||
- custom_days: Must be positive integer (> 0)
|
||||
- user_choice: 1-2 only, rejects invalid with error message
|
||||
- Retry on failure, no silent defaults
|
||||
|
||||
Impact: Security analysis tool - HIGH impact fix
|
||||
Lines modified: ~40
|
||||
Compliance: ✓ INPUT_VALIDATION ✓ DEFAULT_VALUES ✓ COLOR_CODES (already had GREEN)
|
||||
|
||||
================================================================================
|
||||
TESTING RESULTS:
|
||||
================================================================================
|
||||
|
||||
Email-Diagnostics:
|
||||
✓ Invalid choice (9) rejected with error message
|
||||
✓ Valid choice (1) accepted and continues
|
||||
✓ Email validation accepts: test@example.com
|
||||
✓ Email validation rejects: invalid.email, test@, @example.com
|
||||
✓ Color codes display correctly in output
|
||||
|
||||
500-Error-Tracker:
|
||||
✓ Invalid choice (9) rejected with error message
|
||||
✓ Valid choice (1) accepted and continues
|
||||
✓ Option 0 exits immediately without processing
|
||||
✓ Color codes display correctly in output
|
||||
|
||||
Bot-Analyzer:
|
||||
✓ Invalid time_choice rejected with error
|
||||
✓ Valid time_choice accepted
|
||||
✓ Custom hours validation rejects non-numeric
|
||||
✓ Custom days validation rejects non-numeric
|
||||
✓ User choice validation rejects invalid options
|
||||
✓ Proper break statements exit loops
|
||||
|
||||
================================================================================
|
||||
NEXT PHASE (MEDIUM PRIORITY):
|
||||
================================================================================
|
||||
|
||||
Recommended next scripts to standardize:
|
||||
4. mysql-query-analyzer.sh - MEDIUM priority
|
||||
5. mail-log-analyzer.sh - MEDIUM priority
|
||||
6. Other medium/lower priority scripts
|
||||
|
||||
These follow the same pattern and would benefit from:
|
||||
- Input validation on domain/user selection
|
||||
- Color codes on menu options
|
||||
- Default value handling improvements
|
||||
|
||||
|
||||
Reference in New Issue
Block a user