# Create client config peers::create_client_config "$full_name" "$effective_type" "$ip" "$allowed_ips" || return 1 # Store subtype in meta if [[ -n "$subtype" ]]; then peers::set_meta "$full_name" "subtype" "$subtype" fi # Add peer to server config local public_key public_key=$(keys::public "$full_name") || return 1 peers::add_to_server "$full_name" "$public_key" "$ip" || return 1 log::wg_add "Rule: ${rule:-none}" # Apply presets for preset in "${presets[@]}"; do firewall::apply_preset "$preset" "${ip}" || return 1 done # Apply rule if [[ -n "$rule" ]]; then rule::apply "$rule" "$ip" || return 1 fi # Reload WireGuard peers::reload || return 1 log::wg_success "Client added successfully: ${full_name} (${ip}) [${tunnel} tunnel]"