function cmd::identity::_show() { local name="" while [[ $# -gt 0 ]]; do case "$1" in --name) name="$2"; shift 2 ;; --help) cmd::identity::help; return ;; *) log::error "Unknown flag: $1"; return 1 ;; esac done [[ -z "$name" ]] && { log::error "Missing required flag: --name"; return 1; } identity::require_exists "$name" || return 1 # Gather identity-level metadata local policy strict auto rules_list peer_count policy=$(identity::policy "$name") strict=$(identity::rule_flags "$name" "strict_rule") auto=$(identity::rule_flags "$name" "auto_apply") rules_list=$(identity::rules "$name" | tr '\n' ',' | sed 's/,$//' | sed 's/,/, /g') local data data=$(identity::show_data "$name") peer_count=$(echo "$data" | grep '^peer_count|' | cut -d'|' -f2) # Precompute handshakes once for all peers in this identity declare -A _id_handshakes=() while IFS=$'\t' read -r pk ts; do [[ -n "$pk" ]] && _id_handshakes["$pk"]="$ts" done < <(wg show "$(config::interface)" latest-handshakes 2>/dev/null) # Header echo "" ui::row "Identity" "$name" ui::row "Policy" "$policy" ui::row "Rules" "${rules_list:-—}" ui::row "Strict rule" "$(ui::bool "$strict")" ui::row "Auto apply" "$(ui::bool "$auto")" ui::row "Peers" "$peer_count" echo "" # Device list while IFS='|' read -r key val type_val index_val; do case "$key" in name|peer_count) ;; device) local status="" status=$(cmd::identity::_device_status "$val" _id_handshakes) ui::identity::device_row "$val" "$type_val" "$index_val" "$status" ;; esac done <<< "$data" echo "" }