[IMPROVED] Mejorar manejo de tokens en cversadm_token.sh siguiendo el ejemplo de cortana_token.sh

- Implementar validación completa de tokens (longitud, formato, caracteres especiales)
- Encriptar tokens en base64 antes de guardarlos con SOPS
- Usar nombre de archivo temporal único con $$ para prevenir colisiones
- Añadir comprobaciones de seguridad adicionales para tokens
- Mover todos los mensajes de validación a developers.es

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-03-15 13:41:23 -05:00
parent 4a1933cc8b
commit fdc8d6b826
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
2 changed files with 45 additions and 13 deletions

View file

@ -106,10 +106,11 @@ select_platform() {
return 0 return 0
} }
# Función para solicitar el token # Función para solicitar y validar el token
request_token() { request_token() {
local platform=$1 local platform=$1
local platform_name="" local platform_name=""
local token=""
case $platform in case $platform in
"github") platform_name="${cvmsg_010}" ;; "github") platform_name="${cvmsg_010}" ;;
@ -117,14 +118,39 @@ request_token() {
"forgejo") platform_name="${cvmsg_012}" ;; "forgejo") platform_name="${cvmsg_012}" ;;
esac 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}" ${cvmsg_005}"
if [ $codex -ne 0 ]; then if [ $codex -ne 0 ]; then
return 1 return 1
fi fi
echo "$value" 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
echo "$token"
return 0 return 0
} }
@ -133,19 +159,22 @@ save_token() {
local platform=$1 local platform=$1
local token=$2 local token=$2
local filename="${DEVELOPERS_DIR}/${platform}.sops.yaml" local filename="${DEVELOPERS_DIR}/${platform}.sops.yaml"
local token_file="/tmp/vcs_token_$$"
# Crear archivo YAML temporal con el token # Convertir token a base64 para mayor seguridad
local temp_file=$(mktemp) local token_base64=$(echo -n "$token" | base64)
echo "token: $token" > "$temp_file"
# Crear archivo temporal con el token en base64
echo "token: $token_base64" > "$token_file"
# Encriptar el archivo con SOPS # Encriptar el archivo con SOPS
sops --encrypt "$temp_file" > "$filename" sops --encrypt "$token_file" > "$filename"
local result=$? local result=$?
# Eliminar archivo temporal # 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 if [ $result -eq 0 ]; then
chmod 600 "$filename" chmod 600 "$filename"
fi fi

View file

@ -56,4 +56,7 @@ cvmsg_011="Gitlab"
cvmsg_012="Forgejo" cvmsg_012="Forgejo"
cvmsg_013="SOPS no está instalado" cvmsg_013="SOPS no está instalado"
cvmsg_014="Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias." 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."