diff --git a/bin/cversadm_token.sh b/bin/cversadm_token.sh index 8ee6d32..f7d1903 100755 --- a/bin/cversadm_token.sh +++ b/bin/cversadm_token.sh @@ -106,10 +106,11 @@ select_platform() { return 0 } -# Función para solicitar el token +# Función para solicitar y validar el token request_token() { local platform=$1 local platform_name="" + local token="" case $platform in "github") platform_name="${cvmsg_010}" ;; @@ -117,14 +118,39 @@ request_token() { "forgejo") platform_name="${cvmsg_012}" ;; esac - dialog_input_pass "${cvmsg_003}" "${cvmsg_004} $platform_name + # Bucle para validación de token + while true; do + dialog_input_pass "${cvmsg_003}" "${cvmsg_004} $platform_name ${cvmsg_005}" + + if [ $codex -ne 0 ]; then + return 1 + fi + + token="$value" + + # Validar token + if [ -z "$token" ]; then + dialog_error_box "${head_error}" "${cvmsg_015}" + continue + fi + + # Verificar longitud (debería tener al menos 30 caracteres) + if [ ${#token} -lt 30 ]; then + dialog_error_box "${head_error}" "${cvmsg_016}" + continue + fi + + # Verificar formato (debería contener caracteres alfanuméricos y algunos especiales) + if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then + dialog_error_box "${head_warning}" "${cvmsg_017}" + fi + + # Token válido + break + done - if [ $codex -ne 0 ]; then - return 1 - fi - - echo "$value" + echo "$token" return 0 } @@ -133,19 +159,22 @@ save_token() { local platform=$1 local token=$2 local filename="${DEVELOPERS_DIR}/${platform}.sops.yaml" + local token_file="/tmp/vcs_token_$$" - # Crear archivo YAML temporal con el token - local temp_file=$(mktemp) - echo "token: $token" > "$temp_file" + # Convertir token a base64 para mayor seguridad + local token_base64=$(echo -n "$token" | base64) + + # Crear archivo temporal con el token en base64 + echo "token: $token_base64" > "$token_file" # Encriptar el archivo con SOPS - sops --encrypt "$temp_file" > "$filename" + sops --encrypt "$token_file" > "$filename" local result=$? # Eliminar archivo temporal - rm "$temp_file" + rm -f "$token_file" - # Establecer permisos adecuados + # Establecer permisos adecuados (solo lectura para el propietario) if [ $result -eq 0 ]; then chmod 600 "$filename" fi diff --git a/bin/msg/developers.es b/bin/msg/developers.es index f3ef27f..c988816 100644 --- a/bin/msg/developers.es +++ b/bin/msg/developers.es @@ -56,4 +56,7 @@ cvmsg_011="Gitlab" cvmsg_012="Forgejo" cvmsg_013="SOPS no está instalado" cvmsg_014="Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias." +cvmsg_015="El token no puede estar vacío. Por favor ingrese un token válido." +cvmsg_016="El token parece ser demasiado corto. Verifique que haya copiado el token completo." +cvmsg_017="El token contiene caracteres no estándar. Verifique que sea correcto."