Last active 1 month ago

nuno revised this gist 1 month ago. Go to revision

1 file changed, 123 insertions

gistfile1.txt(file created)

@@ -0,0 +1,123 @@
1 + function 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 +
39 + function 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 +
85 + function cmd::group::show() {
86 + local name=""
87 +
88 + while [[ $# -gt 0 ]]; do
89 + function 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 +
117 + function 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 ;;
Newer Older