Последняя активность 1 month ago

Версия b35a89292eea4485b0a61502663c57008423806c

gistfile1.txt Исходник
1function cmd::group::rm_peers() {
2 local name="" force=false
3
4 while [[ $# -gt 0 ]]; do
5 case "$1" in
6 --name) util::require_flag "--name" "${2:-}" || return 1; name="$2"; shift 2 ;;
7 --force) force=true; shift ;;
8 --help) cmd::group::help; return ;;
9 *) log::error "Unknown flag: $1"; return 1 ;;
10 esac
11 done
12
13 [[ -z "$name" ]] && log::error "Missing required flag: --name" && return 1
14 group::require_exists "$name" || return 1
15
16 local peers_list=()
17 mapfile -t peers_list < <(group::peers "$name")
18 local peer_count=${#peers_list[@]}
19 [[ -z "${peers_list[0]:-}" ]] && peer_count=0
20
21 if [[ "$peer_count" -eq 0 ]]; then
22 log::wg_warning "Group '${name}' has no peers"
23 return 0
24 fi
25
26 if ! $force; then
27 read -r -p "Remove all ${peer_count} peers in group '${name}' from WireGuard? [y/N] " confirm
28 case "$confirm" in
29 [yY][eE][sS]|[yY]) ;;
30 *) log::info "Aborted"; return 0 ;;
31 esac
32 fi
33
34 load_command remove
35 group::each_peer "$name" cmd::group::_rm_peer_cb
36 log::wg_success "Removed peers from group '${name}' (definition kept)"
37}
38function cmd::group::_rm_peer_cb() {
39 local peer_name="${1:-}"
40 if ! group::_peer_exists_check "$peer_name"; then
41 log::wg_warning "Peer '${peer_name}' no longer exists — skipping"
42 return 0
43 fi
44 cmd::remove::run --name "$peer_name" --force
45}
46