From cc3864a342ba92f78e6add2d07430d06f083c178 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Sun, 6 Apr 2025 10:44:34 -0500 Subject: [PATCH] [FIXED] Mejora en script sops_rules.sh para usar fingerprints GPG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Corregido el método para obtener los fingerprints GPG completos (40 caracteres) - Mejorada la visualización de las claves mostrando la parte corta del fingerprint - Añadido manejo para claves sin información de usuario - Mejor procesamiento del fingerprint seleccionado - Información más detallada en la confirmación final 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/sops_rules.sh | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/bin/sops_rules.sh b/bin/sops_rules.sh index d0dca1c..9634c63 100755 --- a/bin/sops_rules.sh +++ b/bin/sops_rules.sh @@ -120,9 +120,9 @@ validate_fingerprint() { return 0 } -# Función para obtener las claves GPG disponibles +# Función para obtener las claves GPG disponibles con sus huellas digitales get_available_keys() { - gpg --list-keys --with-colons | grep -E "^pub" | awk -F: '{print $5}' + gpg --list-keys --with-colons | grep -E "^fpr" | awk -F: '{print $10}' } # Función para mostrar un error y esperar confirmación @@ -131,12 +131,18 @@ show_error() { gum input --placeholder "Presiona Enter para continuar..." } -# Función para obtener información de la clave +# Función para obtener información de la clave a partir del fingerprint get_key_info() { local fingerprint=$1 local key_info=$(gpg --list-keys --with-colons "$fingerprint") local user_id=$(echo "$key_info" | grep -E "^uid" | head -n 1 | awk -F: '{print $10}') - echo "$user_id" + + # Si no hay información de usuario, mostrar solo el fingerprint + if [ -z "$user_id" ]; then + echo "Sin información de usuario" + else + echo "$user_id" + fi } # Ruta donde se creará el archivo .sops.yaml @@ -166,17 +172,22 @@ fi # Mostrar información y permitir selección echo -gum style --foreground "#00AAFF" "Claves GPG disponibles:" +gum style --foreground "#00AAFF" "Claves GPG disponibles (Fingerprints):" echo +# Formatear opciones para mostrar información clara KEY_OPTIONS=() for key in "${AVAILABLE_KEYS[@]}"; do key_info=$(get_key_info "$key") - KEY_OPTIONS+=("$key ($key_info)") + # Formatear la clave para mostrar solo los últimos 8 caracteres y la información de usuario + key_short="${key:(-8)}" + KEY_OPTIONS+=("$key - $key_short ($key_info)") done +# Seleccionar la clave SELECTED_KEY_FULL=$(gum choose "${KEY_OPTIONS[@]}") -SELECTED_KEY=$(echo "$SELECTED_KEY_FULL" | awk '{print $1}') +# Extraer el fingerprint completo (la primera palabra antes del guion) +SELECTED_KEY=$(echo "$SELECTED_KEY_FULL" | cut -d ' ' -f 1) # Validar la selección if [ -z "$SELECTED_KEY" ]; then @@ -201,7 +212,8 @@ fi # Confirmar la selección echo gum style --foreground "#00FF00" "Se utilizará la siguiente clave para encriptación SOPS:" -gum style "Fingerprint: $SELECTED_KEY" +gum style "Fingerprint completo: $SELECTED_KEY" +gum style "ID corto: ${SELECTED_KEY:(-8)}" gum style "Usuario: $(get_key_info "$SELECTED_KEY")" echo