最終更新 1 month ago

gistfile1.txt Raw
1function cmd::rule::list() {
2 local rules_dir
3 rules_dir="$(ctx::rules)"
4
5 local rules=("${rules_dir}"/*.rule)
6 if [[ ! -f "${rules[0]}" ]]; then
7 log::wg "No rules configured"
8 return 0
9 fi
10
11 log::section "Firewall Rules"
12 printf "\n %-20s %-40s %-8s %-8s %s\n" \
13 "NAME" "DESCRIPTION" "ALLOWS" "BLOCKS" "PEERS"
14 printf " %s\n" "$(printf '─%.0s' {1..88})"
15
16 local printing_base=false
17 local current_group=""
18
19 while IFS="|" read -r name desc n_allows n_blocks peer_count extends is_base group; do
20 [[ -z "$name" ]] && continue
21
22 if [[ "$is_base" == "True" && "$printing_base" == "false" ]]; then
23 printf "\n \033[0;37m── Base Rules \033[0m%s\n" \
24 "$(printf '─%.0s' {1..74})"
25 printing_base=true
26 fi
27
28 # Group header
29 if [[ "$group" != "$current_group" ]]; then
30 if [[ -n "$current_group" ]]; then
31 printf " %s\n" "$(printf '─%.0s' {1..88})" # close previous group
32 fi
33 if [[ -n "$group" ]]; then
34 local gdashes
35 gdashes=$(printf '─%.0s' {1..$((88 - ${#group} - 5))})
36 printf "\n \033[0;37m── %s \033[0m%s\n" "$group" "$gdashes"
37 fi
38 current_group="$group"
39 fi
40
41 local short_desc="${desc:0:35}"
42 [[ ${#desc} -gt 35 ]] && short_desc="${short_desc}..."
43
44 # Em-dash correction
45 local desc_col_width=40
46 [[ "${short_desc}" == "—" || -z "$short_desc" ]] && desc_col_width=42
47
48 # Main rule line
49 if [[ "$is_base" == "True" ]]; then
50 printf " %-20s %-${desc_col_width}s %-8s %-8s %s\n" \
51 "$name" "${short_desc:-—}" "$n_allows" "$n_blocks" "${peer_count} peers"
52 else
53 printf " %-20s %-40s %-8s %-8s %s\n" \
54 "$name" "${short_desc:-—}" "$n_allows" "$n_blocks" "${peer_count} peers"
55 fi
56
57 # Extends — one per line, indented
58 if [[ -n "$extends" ]]; then
59 IFS=',' read -ra extend_list <<< "$extends"
60 for base in "${extend_list[@]}"; do
61 # printf " %-20s \033[0;37m↳ %s\033[0m\n" "" "$base"
62 printf " \033[0;37m ↳ %-16s\033[0m\n" "$base"
63 done
64 fi
65
66 done < <(json::rule_list_data "$rules_dir" "$(ctx::meta)")
67
68 printf "\n"
69}