gistfile1.txt
· 3.5 KiB · Text
Неформатований
function cmd::group::run() {
local subcmd="${1:-help}"
shift || true
if command::json; then
cmd::group::_output_json
return 0
fi
case "$subcmd" in
list|ls) cmd::group::list "$@" ;;
show) cmd::group::show "$@" ;;
add|new|create) cmd::group::add "$@" ;;
remove|rm|del|delete) cmd::group::remove "$@" ;;
rename) cmd::group::rename "$@" ;;
peer) cmd::group::peer "$@" ;;
rm-peers) cmd::group::rm_peers "$@" ;;
set-main) cmd::group::set_main "$@" ;;
block) cmd::group::block "$@" ;;
unblock) cmd::group::unblock "$@" ;;
rule) cmd::group::rule "$@" ;;
purge-stale) cmd::group::purge_stale "$@" ;;
audit) cmd::group::audit "$@" ;;
logs) cmd::group::logs "$@" ;;
watch) cmd::group::watch "$@" ;;
help) cmd::group::help ;;
*)
log::error "Unknown subcommand: '${subcmd}'"
cmd::group::help
return 1
;;
esac
}
# ============================================
# List
# ============================================
function cmd::group::list() {
local groups_dir
groups_dir="$(ctx::groups)"
local groups=("${groups_dir}"/*.group)
if [[ ! -f "${groups[0]}" ]]; then
log::wg "No groups configured"
return 0
fi
local data
data=$(json::group_list_data "$groups_dir" "$(ctx::blocks)" "$(ctx::clients)")
[[ -z "$data" ]] && log::wg "No groups configured" && return 0
# Measure column widths
local w_name=12 w_desc=16
while IFS="|" read -r name desc total blocked; do
[[ -z "$name" ]] && continue
(( ${#name} > w_name )) && w_name=${#name}
local desc_len=${#desc}
[[ -z "$desc" ]] && desc_len=1
(( desc_len > w_desc )) && w_desc=$desc_len
done <<< "$data"
(( w_name += 2 ))
(( w_desc += 2 ))
log::section "Groups"
echo ""
if display::is_table "group_list"; then
cmd::group::_render_table "$data" "$w_name" "$w_desc"
return 0
fi
while IFS="|" read -r name desc total blocked; do
[[ -z "$name" ]] && continue
ui::group::list_row "$name" "$desc" "$total" "$blocked" "$w_name" "$w_desc"
done <<< "$data"
echo ""
}
# ============================================
# Show
# ============================================
function cmd::group::show() {
local name=""
while [[ $# -gt 0 ]]; do
function cmd::group::add() {
local name="" desc=""
while [[ $# -gt 0 ]]; do
case "$1" in
--name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
--desc) util::require_flag "--desc" "${2:-}" || return 1; desc="$2"; shift 2 ;;
--help) cmd::group::help; return ;;
*) log::error "Unknown flag: $1"; return 1 ;;
esac
done
[[ -z "$name" ]] && log::error "Missing required flag: --name" && return 1
if group::exists "$name"; then
log::error "Group already exists: ${name}"
return 1
fi
json::create_group "$(group::path "$name")" "$name" "$desc"
log::wg_success "Group created: ${name}"
}
# ============================================
# Remove
# ============================================
function cmd::group::remove() {
local name="" force=false
while [[ $# -gt 0 ]]; do
case "$1" in
--name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
--force) force=true; shift ;;
| 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 ;; |