Files
fn_registry/bash/functions/infra/nordvpn_status.sh
T
egutierrez c33e907fef feat: funciones NordVPN bash y Go — CLI, contenedor Docker y parser de estado
Funciones bash para instalar, conectar, desconectar, estado, IP, ciudades, países y protocolo.
Funciones Go para gestionar contenedor NordVPN (run/start/stop) y parsear estado.
Incluye tipo NordVPNStatus y tests para el parser.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 20:55:08 +02:00

44 lines
1.2 KiB
Bash

# nordvpn_status
# --------------
# Obtiene el estado actual de NordVPN como JSON estructurado.
# Parsea la salida clave-valor de `nordvpn status` a campos JSON.
#
# USO (sourced):
# source nordvpn_status.sh
# nordvpn_status
nordvpn_status() {
if ! command -v nordvpn &>/dev/null; then
echo '{"ok":false,"error":"nordvpn no instalado"}' >&2
return 1
fi
local output
output=$(nordvpn status 2>&1)
local rc=$?
if [ $rc -ne 0 ]; then
echo "{\"ok\":false,\"error\":$(echo "$output" | python3 -c 'import sys,json; print(json.dumps(sys.stdin.read().strip()))' 2>/dev/null || echo "\"$output\"")}"
return 1
fi
# Parsear output clave: valor a JSON con python3
echo "$output" | python3 -c '
import sys, json, re
lines = sys.stdin.read().strip().split("\n")
data = {"ok": True}
for line in lines:
line = re.sub(r"\x1b\[[0-9;]*m", "", line).strip()
line = line.lstrip("- ")
if ":" in line:
key, _, val = line.partition(":")
key = key.strip().lower().replace(" ", "_")
val = val.strip()
if key == "status":
data["connected"] = val.lower() == "connected"
data[key] = val
print(json.dumps(data))
'
}