Zuletzt aktiv 1 month ago

Änderung 90dc4fe52eeacccd26420d4279c43ba13e2ea9db

gistfile1.txt Originalformat
1function cmd::group::run() {
2 local subcmd="${1:-help}"
3 shift || true
4
5 if command::json; then
6 cmd::group::_output_json
7 return 0
8 fi
9
10 case "$subcmd" in
11 list|ls) cmd::group::list "$@" ;;
12 show) cmd::group::show "$@" ;;
13 add|new|create) cmd::group::add "$@" ;;
14 remove|rm|del|delete) cmd::group::remove "$@" ;;
15 rename) cmd::group::rename "$@" ;;
16 peer) cmd::group::peer "$@" ;;
17 rm-peers) cmd::group::rm_peers "$@" ;;
18 set-main) cmd::group::set_main "$@" ;;
19 block) cmd::group::block "$@" ;;
20 unblock) cmd::group::unblock "$@" ;;
21 rule) cmd::group::rule "$@" ;;
22 purge-stale) cmd::group::purge_stale "$@" ;;
23 audit) cmd::group::audit "$@" ;;
24 logs) cmd::group::logs "$@" ;;
25 watch) cmd::group::watch "$@" ;;
26 help) cmd::group::help ;;
27 *)
28 log::error "Unknown subcommand: '${subcmd}'"
29 cmd::group::help
30 return 1
31 ;;
32 esac
33}
34
35# ============================================
36# List
37# ============================================
38
39function cmd::group::list() {
40 local groups_dir
41 groups_dir="$(ctx::groups)"
42
43 local groups=("${groups_dir}"/*.group)
44 if [[ ! -f "${groups[0]}" ]]; then
45 log::wg "No groups configured"
46 return 0
47 fi
48
49 local data
50 data=$(json::group_list_data "$groups_dir" "$(ctx::blocks)" "$(ctx::clients)")
51 [[ -z "$data" ]] && log::wg "No groups configured" && return 0
52
53 # Measure column widths
54 local w_name=12 w_desc=16
55 while IFS="|" read -r name desc total blocked; do
56 [[ -z "$name" ]] && continue
57 (( ${#name} > w_name )) && w_name=${#name}
58 local desc_len=${#desc}
59 [[ -z "$desc" ]] && desc_len=1
60 (( desc_len > w_desc )) && w_desc=$desc_len
61 done <<< "$data"
62 (( w_name += 2 ))
63 (( w_desc += 2 ))
64
65 log::section "Groups"
66 echo ""
67
68 if display::is_table "group_list"; then
69 cmd::group::_render_table "$data" "$w_name" "$w_desc"
70 return 0
71 fi
72
73 while IFS="|" read -r name desc total blocked; do
74 [[ -z "$name" ]] && continue
75 ui::group::list_row "$name" "$desc" "$total" "$blocked" "$w_name" "$w_desc"
76 done <<< "$data"
77
78 echo ""
79}
80
81# ============================================
82# Show
83# ============================================
84
85function cmd::group::show() {
86 local name=""
87
88 while [[ $# -gt 0 ]]; do
89function cmd::group::add() {
90 local name="" desc=""
91
92 while [[ $# -gt 0 ]]; do
93 case "$1" in
94 --name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
95 --desc) util::require_flag "--desc" "${2:-}" || return 1; desc="$2"; shift 2 ;;
96 --help) cmd::group::help; return ;;
97 *) log::error "Unknown flag: $1"; return 1 ;;
98 esac
99 done
100
101 [[ -z "$name" ]] && log::error "Missing required flag: --name" && return 1
102
103 if group::exists "$name"; then
104 log::error "Group already exists: ${name}"
105 return 1
106 fi
107
108 json::create_group "$(group::path "$name")" "$name" "$desc"
109
110 log::wg_success "Group created: ${name}"
111}
112
113# ============================================
114# Remove
115# ============================================
116
117function cmd::group::remove() {
118 local name="" force=false
119
120 while [[ $# -gt 0 ]]; do
121 case "$1" in
122 --name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
123 --force) force=true; shift ;;