cat /etc/wireguard/wgctl/commands/rule.command.sh | grep -A 50 "function cmd::rule::list" function cmd::rule::list() { local rules_dir rules_dir="$(ctx::rules)" local rules=("${rules_dir}"/*.rule) if [[ ! -f "${rules[0]}" ]]; then log::wg "No rules configured" return 0 fi local rules=("${rules_dir}"/*.rule) echo "DEBUG: first=${rules[0]}" echo "DEBUG: count=${#rules[@]}" log::section "Firewall Rules" printf "\n %-20s %-35s %-8s %-8s %s\n" \ "NAME" "DESCRIPTION" "ALLOWS" "BLOCKS" "PEERS" printf " %s\n" "$(printf '─%.0s' {1..80})" for rule_file in "${rules_dir}"/*.rule; do [[ -f "$rule_file" ]] || continue local name desc peer_count name=$(json::get "$rule_file" "name") desc=$(json::get "$rule_file" "desc") local n_allows n_block_ips n_block_ports blocks n_allows=$(json::get "$rule_file" "allow_ips" | grep -v '^$' | wc -l | tr -d ' ') n_block_ips=$(json::get "$rule_file" "block_ips" | grep -v '^$' | wc -l | tr -d ' ') n_block_ports=$(json::get "$rule_file" "block_ports" | grep -v '^$' | wc -l | tr -d ' ') # wc -l returns 0 for empty, so this is safe blocks=$(( n_block_ips + n_block_ports )) # Count assigned peers peer_count=$(peers::with_rule "$name" | grep -c .) local short_desc="${desc:0:33}" [[ ${#desc} -gt 33 ]] && short_desc="${short_desc}..." printf " %-20s %-36s %-8s %-8s %s\n" \ "$name" \ "${short_desc:-—}" \ "${n_allows}" \ "${blocks}" \ "${peer_count} peers" done printf "\n"