[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
}
# 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

View file

@ -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."