gistfile1.txt
· 2.0 KiB · Text
Ham
function cmd::list::_precompute_all() {
# Peer data
declare -gA p_ips=() p_rules=() p_subtypes=() p_last_ts=() p_last_evt=()
while IFS="|" read -r name ip rule subtype last_ts last_evt; do
[[ -z "$name" ]] && continue
p_ips["$name"]="$ip"
p_rules["$name"]="${rule:-—}"
p_subtypes["$name"]="$subtype"
p_last_ts["$name"]="$last_ts"
p_last_evt["$name"]="$last_evt"
done < <(json::peer_data "$(ctx::clients)" "$(ctx::meta)" "$(ctx::events_log)")
# WireGuard handshakes + endpoints
declare -gA wg_handshakes=() wg_endpoints=()
while IFS=$'\t' read -r pubkey ts; do
[[ -n "$pubkey" ]] && wg_handshakes["$pubkey"]="$ts"
done < <(wg show "$(config::interface)" latest-handshakes 2>/dev/null)
while IFS=$'\t' read -r pubkey endpoint; do
[[ -n "$pubkey" ]] && wg_endpoints["$pubkey"]="$endpoint"
done < <(wg show "$(config::interface)" endpoints 2>/dev/null)
# Block/restricted status
declare -gA p_blocked=() p_restricted=()
cmd::list::_precompute_block_status p_blocked p_restricted
# Public keys
declare -gA p_pubkeys=()
local dir
dir="$(ctx::clients)"
for kf in "${dir}"/*_public.key; do
[[ -f "$kf" ]] || continue
local kname
kname=$(basename "$kf" _public.key)
p_pubkeys["$kname"]=$(cat "$kf" 2>/dev/null || echo "")
done
# Groups
has_groups=false
declare -gA peer_group_map=()
local groups_dir
groups_dir="$(ctx::groups)"
local group_files=("${groups_dir}"/*.group)
if [[ -f "${group_files[0]}" ]]; then
has_groups=true
while IFS=":" read -r peer_name group_name; do
[[ -n "$peer_name" ]] && peer_group_map["$peer_name"]="$group_name"
done < <(json::peer_group_map "$groups_dir")
fi
# Transfer/activity data — keyed by pubkey
declare -gA p_rx=() p_tx=() p_activity=()
while IFS="|" read -r pubkey rx tx level; do
[[ -z "$pubkey" ]] && continue
p_rx["$pubkey"]="$rx"
p_tx["$pubkey"]="$tx"
p_activity["$pubkey"]="$level"
done < <(json::peer_transfer "$(config::interface)")
}
| 1 | function cmd::list::_precompute_all() { |
| 2 | # Peer data |
| 3 | declare -gA p_ips=() p_rules=() p_subtypes=() p_last_ts=() p_last_evt=() |
| 4 | while IFS="|" read -r name ip rule subtype last_ts last_evt; do |
| 5 | [[ -z "$name" ]] && continue |
| 6 | p_ips["$name"]="$ip" |
| 7 | p_rules["$name"]="${rule:-—}" |
| 8 | p_subtypes["$name"]="$subtype" |
| 9 | p_last_ts["$name"]="$last_ts" |
| 10 | p_last_evt["$name"]="$last_evt" |
| 11 | done < <(json::peer_data "$(ctx::clients)" "$(ctx::meta)" "$(ctx::events_log)") |
| 12 | |
| 13 | # WireGuard handshakes + endpoints |
| 14 | declare -gA wg_handshakes=() wg_endpoints=() |
| 15 | while IFS=$'\t' read -r pubkey ts; do |
| 16 | [[ -n "$pubkey" ]] && wg_handshakes["$pubkey"]="$ts" |
| 17 | done < <(wg show "$(config::interface)" latest-handshakes 2>/dev/null) |
| 18 | while IFS=$'\t' read -r pubkey endpoint; do |
| 19 | [[ -n "$pubkey" ]] && wg_endpoints["$pubkey"]="$endpoint" |
| 20 | done < <(wg show "$(config::interface)" endpoints 2>/dev/null) |
| 21 | |
| 22 | # Block/restricted status |
| 23 | declare -gA p_blocked=() p_restricted=() |
| 24 | cmd::list::_precompute_block_status p_blocked p_restricted |
| 25 | |
| 26 | # Public keys |
| 27 | declare -gA p_pubkeys=() |
| 28 | local dir |
| 29 | dir="$(ctx::clients)" |
| 30 | for kf in "${dir}"/*_public.key; do |
| 31 | [[ -f "$kf" ]] || continue |
| 32 | local kname |
| 33 | kname=$(basename "$kf" _public.key) |
| 34 | p_pubkeys["$kname"]=$(cat "$kf" 2>/dev/null || echo "") |
| 35 | done |
| 36 | |
| 37 | # Groups |
| 38 | has_groups=false |
| 39 | declare -gA peer_group_map=() |
| 40 | local groups_dir |
| 41 | groups_dir="$(ctx::groups)" |
| 42 | local group_files=("${groups_dir}"/*.group) |
| 43 | if [[ -f "${group_files[0]}" ]]; then |
| 44 | has_groups=true |
| 45 | while IFS=":" read -r peer_name group_name; do |
| 46 | [[ -n "$peer_name" ]] && peer_group_map["$peer_name"]="$group_name" |
| 47 | done < <(json::peer_group_map "$groups_dir") |
| 48 | fi |
| 49 | |
| 50 | # Transfer/activity data — keyed by pubkey |
| 51 | declare -gA p_rx=() p_tx=() p_activity=() |
| 52 | while IFS="|" read -r pubkey rx tx level; do |
| 53 | [[ -z "$pubkey" ]] && continue |
| 54 | p_rx["$pubkey"]="$rx" |
| 55 | p_tx["$pubkey"]="$tx" |
| 56 | p_activity["$pubkey"]="$level" |
| 57 | done < <(json::peer_transfer "$(config::interface)") |
| 58 | } |