Dernière activité 1 month ago

gistfile1.txt Brut
1function cmd::group::show() {
2 local name=""
3
4 while [[ $# -gt 0 ]]; do
5 case "$1" in
6 --name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
7 --help) cmd::group::help; return ;;
8 *) log::error "Unknown flag: $1"; return 1 ;;
9 esac
10 done
11
12 [[ -z "$name" ]] && log::error "Missing required flag: --name" && return 1
13 group::require_exists "$name" || return 1
14
15 local group_file
16 group_file="$(group::path "$name")"
17
18 log::section "Group: ${name}"
19
20 local desc
21 desc=$(json::get "$group_file" "desc")
22 printf "\n %-20s %s\n" "Description:" "${desc:-—}"
23
24 # Load peers
25 local peers_list=()
26 mapfile -t peers_list < <(json::get "$group_file" "peers")
27 # Filter empty entries
28 local filtered=()
29 for p in "${peers_list[@]:-}"; do
30 [[ -n "$p" ]] && filtered+=("$p")
31 done
32 peers_list=("${filtered[@]:-}")
33 local peer_count=${#peers_list[@]}
34
35 [[ -z "${peers_list[0]}" ]] && peer_count=0
36
37 printf " %-20s %s\n" "Peers:" "$peer_count"
38 printf " %s\n" "$(printf '─%.0s' {1..50})"
39
40 if [[ "$peer_count" -gt 0 ]]; then
41 printf "\n %-28s %-15s %-12s %s\n" "NAME" "IP" "RULE" "STATUS"
42 printf " %s\n" "$(printf '─%.0s' {1..65})"
43 for peer_name in "${peers_list[@]}"; do
44 [[ -z "$peer_name" ]] && continue
45 local ip rule status_str status_color
46 ip=$(peers::get_ip "$peer_name")
47 rule=$(peers::get_meta "$peer_name" "rule")
48 rule="${rule:-—}"
49
50 if peers::is_blocked "$peer_name"; then
51 status_color="\033[1;31m"
52 status_str="blocked"
53 else
54 status_color="\033[1;32m"
55 status_str="active"
56 fi
57
58 printf " %-28s %-15s %-12s %b\n" \
59 "$peer_name" "${ip:-—}" "$rule" \
60 "${status_color}${status_str}\033[0m"
61 done
62 else
63 printf " —\n"
64 fi
65
66 printf "\n"
67}