firewallfalcons 2 miesięcy temu
rodzic
commit
5c25df3c2e
1 zmienionych plików z 39 dodań i 21 usunięć
  1. 39 21
      menu.sh

+ 39 - 21
menu.sh

@@ -1346,13 +1346,29 @@ list_users() {
         local connection_string="$online_count / $limit"
         local plain_status="Active"
         local status="${C_GREEN}🟢 Active${C_RESET}"
+        local quota_exceeded=false
+
+        [[ -z "$bandwidth_gb" ]] && bandwidth_gb="0"
+        local bw_string="Unlimited"
+        if [[ "$bandwidth_gb" != "0" ]]; then
+            local used_bytes=0
+            if [[ -f "$BANDWIDTH_DIR/${user}.usage" ]]; then
+                used_bytes=$(cat "$BANDWIDTH_DIR/${user}.usage" 2>/dev/null)
+                [[ "$used_bytes" =~ ^[0-9]+$ ]] || used_bytes=0
+            fi
+            local used_gb
+            used_gb=$(awk "BEGIN {printf \"%.1f\", $used_bytes / 1073741824}")
+            bw_string="${used_gb}/${bandwidth_gb}GB"
+            local quota_bytes
+            quota_bytes=$(awk "BEGIN {printf \"%.0f\", $bandwidth_gb * 1073741824}")
+            if [[ "$quota_bytes" =~ ^[0-9]+$ ]] && (( used_bytes >= quota_bytes )); then
+                quota_exceeded=true
+            fi
+        fi
 
         if [[ -z "${system_user_lookup[$user]+x}" ]]; then
             plain_status="Not Found"
             status="${C_RED}Not Found${C_RESET}"
-        elif [[ -n "${locked_user_lookup[$user]+x}" ]]; then
-            plain_status="Locked"
-            status="${C_YELLOW}🔒 Locked${C_RESET}"
         elif [[ -n "$expiry" && "$expiry" != "Never" ]]; then
             local expiry_ts
             expiry_ts=$(date -d "$expiry" +%s 2>/dev/null || echo 0)
@@ -1362,17 +1378,17 @@ list_users() {
             fi
         fi
 
-        [[ -z "$bandwidth_gb" ]] && bandwidth_gb="0"
-        local bw_string="Unlimited"
-        if [[ "$bandwidth_gb" != "0" ]]; then
-            local used_bytes=0
-            if [[ -f "$BANDWIDTH_DIR/${user}.usage" ]]; then
-                used_bytes=$(cat "$BANDWIDTH_DIR/${user}.usage" 2>/dev/null)
-                [[ "$used_bytes" =~ ^[0-9]+$ ]] || used_bytes=0
+        if [[ "$plain_status" == "Active" && "$quota_exceeded" == true ]]; then
+            if [[ -n "${locked_user_lookup[$user]+x}" ]]; then
+                plain_status="BW Locked"
+                status="${C_RED}🔒 BW Locked${C_RESET}"
+            else
+                plain_status="Quota Exceeded"
+                status="${C_RED}📦 Quota Exceeded${C_RESET}"
             fi
-            local used_gb
-            used_gb=$(awk "BEGIN {printf \"%.1f\", $used_bytes / 1073741824}")
-            bw_string="${used_gb}/${bandwidth_gb}GB"
+        elif [[ "$plain_status" == "Active" && -n "${locked_user_lookup[$user]+x}" ]]; then
+            plain_status="Locked"
+            status="${C_YELLOW}🔒 Locked${C_RESET}"
         fi
 
         local line_color="$C_WHITE"
@@ -1380,6 +1396,8 @@ list_users() {
             "Active") line_color="$C_GREEN" ;;
             "Locked") line_color="$C_YELLOW" ;;
             "Expired") line_color="$C_RED" ;;
+            "BW Locked") line_color="$C_RED" ;;
+            "Quota Exceeded") line_color="$C_RED" ;;
             "Not Found") line_color="$C_DIM" ;;
         esac
 
@@ -4278,11 +4296,11 @@ main_menu() {
         
         echo
         echo -e "   ${C_TITLE}═══════════════════[ ${C_BOLD}👤 USER MANAGEMENT ${C_RESET}${C_TITLE}]═══════════════════${C_RESET}"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "1" "✨ Create New User" "6" "✏️  Edit User Details"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "2" "🗑️  Delete User" "7" "📋 List Managed Users"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "3" "🔄 Renew User Account" "8" "📱 Generate Client Config"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "4" "🔒 Lock User Account" "9" "⏱️  Create Trial Account"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "5" "🔓 Unlock User Account" "10" "📊 View User Bandwidth"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "1" "✨ Create New User" "2" "🗑️  Delete User"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "3" "🔄 Renew User Account" "4" "🔒 Lock User Account"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "5" "🔓 Unlock User Account" "6" "✏️  Edit User Details"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "7" "📋 List Managed Users" "8" "📱 Generate Client Config"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "9" "⏱️  Create Trial Account" "10" "📊 View User Bandwidth"
         printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "11" "👥 Bulk Create Users"
         
         echo
@@ -4292,9 +4310,9 @@ main_menu() {
 
         echo
         echo -e "   ${C_TITLE}══════════════[ ${C_BOLD}⚙️ SYSTEM SETTINGS ${C_RESET}${C_TITLE}]═══════════════${C_RESET}"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "15" "☁️  CloudFlare Free Domain" "18" "💾 Backup User Data"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "16" "🎨 SSH Banner Config" "19" "📥 Restore User Data"
-        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "17" "🔄 Auto-Reboot Task" "20" "🧹 Cleanup Expired Users"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "15" "☁️  CloudFlare Free Domain" "16" "🎨 SSH Banner Config"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "17" "🔄 Auto-Reboot Task" "18" "💾 Backup User Data"
+        printf "     ${C_CHOICE}[%2s]${C_RESET} %-28s ${C_CHOICE}[%2s]${C_RESET} %-28s\n" "19" "📥 Restore User Data" "20" "🧹 Cleanup Expired Users"
 
         echo
         echo -e "   ${C_DANGER}═══════════════════[ ${C_BOLD}🔥 DANGER ZONE ${C_RESET}${C_DANGER}]═══════════════════${C_RESET}"