[FIXED] Mejora en script sops_rules.sh para usar fingerprints GPG

- 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 <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-04-06 10:44:34 -05:00
parent 82836ba642
commit cc3864a342
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26

View file

@ -120,9 +120,9 @@ validate_fingerprint() {
return 0 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() { 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 # Función para mostrar un error y esperar confirmación
@ -131,12 +131,18 @@ show_error() {
gum input --placeholder "Presiona Enter para continuar..." 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() { get_key_info() {
local fingerprint=$1 local fingerprint=$1
local key_info=$(gpg --list-keys --with-colons "$fingerprint") 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}') 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 # Ruta donde se creará el archivo .sops.yaml
@ -166,17 +172,22 @@ fi
# Mostrar información y permitir selección # Mostrar información y permitir selección
echo echo
gum style --foreground "#00AAFF" "Claves GPG disponibles:" gum style --foreground "#00AAFF" "Claves GPG disponibles (Fingerprints):"
echo echo
# Formatear opciones para mostrar información clara
KEY_OPTIONS=() KEY_OPTIONS=()
for key in "${AVAILABLE_KEYS[@]}"; do for key in "${AVAILABLE_KEYS[@]}"; do
key_info=$(get_key_info "$key") 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 done
# Seleccionar la clave
SELECTED_KEY_FULL=$(gum choose "${KEY_OPTIONS[@]}") 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 # Validar la selección
if [ -z "$SELECTED_KEY" ]; then if [ -z "$SELECTED_KEY" ]; then
@ -201,7 +212,8 @@ fi
# Confirmar la selección # Confirmar la selección
echo echo
gum style --foreground "#00FF00" "Se utilizará la siguiente clave para encriptación SOPS:" 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")" gum style "Usuario: $(get_key_info "$SELECTED_KEY")"
echo echo