fix(setup-network): collect all user input before switching AP to prevent SSH session drop mid-prompt

This commit is contained in:
Justin Oros
2026-04-23 11:39:10 -07:00
parent 5d9e0f579c
commit ff5cb104f8

View File

@@ -123,14 +123,31 @@ case "$NET_OPT" in
WPA_CONF=$(wpa_passphrase "$NEW_SSID" "$NEW_PASS") \ WPA_CONF=$(wpa_passphrase "$NEW_SSID" "$NEW_PASS") \
|| die "Failed to generate WPA config — check SSID and password." || die "Failed to generate WPA config — check SSID and password."
info "Currently connected to: ${CURRENT_SSID:-none}"
info "Switching to: ${NEW_SSID}"
warn "Your SSH session will drop. Reconnect once the device joins '${NEW_SSID}'."
echo ""
read -rp "Proceed? [Y/n]: " CONFIRM
CONFIRM="${CONFIRM:-y}"
[[ "${CONFIRM,,}" == "y" ]] || { info "Aborted."; exit 0; }
EXISTING_IDS=$(wpa_cli -i "$WIFI_IFACE" list_networks 2>/dev/null | awk 'NR>1 {print $1}')
if [[ -z "$EXISTING_IDS" ]] && ! wpa_cli -i "$WIFI_IFACE" status >/dev/null 2>&1; then
die "wpa_supplicant is not running on ${WIFI_IFACE}. Start it first."
fi
for EID in $EXISTING_IDS; do
wpa_cli -i "$WIFI_IFACE" disable_network "$EID" >/dev/null 2>&1 || true
done
NETWORK_ID=$(wpa_cli -i "$WIFI_IFACE" add_network 2>/dev/null | tr -d '[:space:]') NETWORK_ID=$(wpa_cli -i "$WIFI_IFACE" add_network 2>/dev/null | tr -d '[:space:]')
[[ "$NETWORK_ID" =~ ^[0-9]+$ ]] || die "wpa_supplicant is not running on ${WIFI_IFACE}. Start it first." [[ "$NETWORK_ID" =~ ^[0-9]+$ ]] || die "Failed to add network — wpa_supplicant may not be running."
PSK=$(echo "$WPA_CONF" | awk -F= '/^\s*psk=/{print $2}' | grep -v '"' | tr -d '[:space:]') PSK=$(echo "$WPA_CONF" | awk -F= '/^\s*psk=/{print $2}' | grep -v '"' | tr -d '[:space:]')
wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" ssid "\"${NEW_SSID}\"" >/dev/null wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" ssid "\"${NEW_SSID}\"" >/dev/null
wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" psk "${PSK}" >/dev/null wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" psk "${PSK}" >/dev/null
wpa_cli -i "$WIFI_IFACE" enable_network "$NETWORK_ID" >/dev/null wpa_cli -i "$WIFI_IFACE" set_network "$NETWORK_ID" freq_list "2412 2417 2422 2427 2432 2437 2442 2447 2452 2457 2462" >/dev/null
wpa_cli -i "$WIFI_IFACE" select_network "$NETWORK_ID" >/dev/null wpa_cli -i "$WIFI_IFACE" select_network "$NETWORK_ID" >/dev/null
info "Waiting for association..." info "Waiting for association..."
@@ -138,11 +155,12 @@ case "$NET_OPT" in
for i in $(seq 1 10); do for i in $(seq 1 10); do
sleep 2 sleep 2
STATUS=$(wpa_cli -i "$WIFI_IFACE" status 2>/dev/null | awk -F= '/^wpa_state=/{print $2}') STATUS=$(wpa_cli -i "$WIFI_IFACE" status 2>/dev/null | awk -F= '/^wpa_state=/{print $2}')
if [ "$STATUS" = "COMPLETED" ]; then CONN_SSID=$(wpa_cli -i "$WIFI_IFACE" status 2>/dev/null | awk -F= '/^ssid=/{print $2}')
if [ "$STATUS" = "COMPLETED" ] && [ "$CONN_SSID" = "$NEW_SSID" ]; then
ASSOCIATED=true ASSOCIATED=true
break break
fi fi
warn "Attempt $i/10 — state: ${STATUS:-unknown}" warn "Attempt $i/10 — state: ${STATUS:-unknown}, ssid: ${CONN_SSID:-none}"
done done
if [ "$ASSOCIATED" = "false" ]; then if [ "$ASSOCIATED" = "false" ]; then