diff --git a/bin/cversadm_token.sh b/bin/cversadm_token.sh new file mode 100755 index 0000000..16dd2b3 --- /dev/null +++ b/bin/cversadm_token.sh @@ -0,0 +1,173 @@ +#!/bin/bash +# +# Script: cversadm_token.sh +# Description: Administrador de tokens para plataformas de control de versiones +# Modified: 2025/03/15 +# [Author] Cortana Rosero One +# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) +# +# Derechos de Autor (C) [2025] [Mauro Rosero P. ] +# +# Este programa es software libre: usted puede redistribuirlo y/o modificarlo +# bajo los términos de la Licencia Pública Affero General de GNU tal como +# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia, +# o (a su elección) cualquier versión posterior. +# +# Este programa se distribuye con la esperanza de que sea útil, +# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de +# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la +# Licencia Pública Affero General de GNU para obtener más detalles. +# +# Debería haber recibido una copia de la Licencia Pública Affero General +# junto con este programa. Si no la recibió, consulte . + +# Configuración inicial +DEVELOPERS_DIR="$HOME/.developers" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_HOME="${SCRIPT_DIR}/.." +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" + +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" + +# Cargar mensajes en español +load_messages "${BIN_HOME}" "${BIN_MESG}" "es" "developers" + +# Variables globales +title="MRDevs Tools" +apps_title="${cvmsg_000}" + +# Función para verificar si SOPS está instalado +check_sops_installed() { + if ! command -v sops &> /dev/null; then + echo "Error: SOPS no está instalado. Por favor, instale SOPS para continuar." + exit 1 + fi +} + +# Función para asegurar que el directorio .developers existe +ensure_developers_dir() { + if [ ! -d "$DEVELOPERS_DIR" ]; then + mkdir -p "$DEVELOPERS_DIR" + chmod 700 "$DEVELOPERS_DIR" + echo "${cvmsg_008} $DEVELOPERS_DIR" + fi +} + +# Función para seleccionar la plataforma de control de versiones +select_platform() { + local options="1 ${cvmsg_010} 2 ${cvmsg_011} 3 ${cvmsg_012}" + + dialog_input_menu "${cvmsg_001}" "${cvmsg_002}" "$options" 12 + + if [ $codex -ne 0 ]; then + return 1 + fi + + case $value in + 1) echo "github" ;; + 2) echo "gitlab" ;; + 3) echo "forgejo" ;; + *) return 1 ;; + esac + + return 0 +} + +# Función para solicitar el token +request_token() { + local platform=$1 + local platform_name="" + + case $platform in + "github") platform_name="${cvmsg_010}" ;; + "gitlab") platform_name="${cvmsg_011}" ;; + "forgejo") platform_name="${cvmsg_012}" ;; + esac + + dialog_input_pass "${cvmsg_003}" "${cvmsg_004} $platform_name +${cvmsg_005}" + + if [ $codex -ne 0 ]; then + return 1 + fi + + echo "$value" + return 0 +} + +# Función para guardar el token encriptado con SOPS +save_token() { + local platform=$1 + local token=$2 + local filename="${DEVELOPERS_DIR}/${platform}.sops.yaml" + + # Crear archivo YAML temporal con el token + local temp_file=$(mktemp) + echo "token: $token" > "$temp_file" + + # Encriptar el archivo con SOPS + sops --encrypt "$temp_file" > "$filename" + local result=$? + + # Eliminar archivo temporal + rm "$temp_file" + + # Establecer permisos adecuados + if [ $result -eq 0 ]; then + chmod 600 "$filename" + fi + + return $result +} + +# Función principal +main() { + # Verificar requisitos + check_sops_installed + ensure_developers_dir + + # Seleccionar plataforma + platform=$(select_platform) + if [ $? -ne 0 ]; then + clear + exit 0 + fi + + # Solicitar token + token=$(request_token "$platform") + if [ $? -ne 0 ]; then + clear + exit 0 + fi + + # Guardar token + save_token "$platform" "$token" + if [ $? -eq 0 ]; then + local platform_name="" + case $platform in + "github") platform_name="${cvmsg_010}" ;; + "gitlab") platform_name="${cvmsg_011}" ;; + "forgejo") platform_name="${cvmsg_012}" ;; + esac + + dialog_error_box "${cvmsg_009}" "${cvmsg_006} $platform_name" + else + local platform_name="" + case $platform in + "github") platform_name="${cvmsg_010}" ;; + "gitlab") platform_name="${cvmsg_011}" ;; + "forgejo") platform_name="${cvmsg_012}" ;; + esac + + dialog_error_box "${head_error}" "${cvmsg_007} $platform_name" + fi + + clear +} + +# Ejecutar función principal +main \ No newline at end of file diff --git a/bin/msg/developers.es b/bin/msg/developers.es index 2efe197..d84536c 100644 --- a/bin/msg/developers.es +++ b/bin/msg/developers.es @@ -40,3 +40,18 @@ dvmsg_105="Opciones:" dvmsg_106=" --help Muestra este mensaje de ayuda." dvmsg_107=" --version Muestra la versión del script." +# Mensajes para cversadm_token.sh +cvmsg_000="ADMINISTRADOR DE TOKENS DE CONTROL DE VERSIONES" +cvmsg_001="Seleccione plataforma de control de versiones" +cvmsg_002="Elija la plataforma para la que desea configurar el token de acceso" +cvmsg_003="Token de acceso" +cvmsg_004="Introduzca el token de acceso personal para" +cvmsg_005="El token se utilizará para operaciones de autenticación" +cvmsg_006="Token guardado correctamente para" +cvmsg_007="Error al guardar el token para" +cvmsg_008="Carpeta de configuración creada:" +cvmsg_009="Seleccione una opción" +cvmsg_010="Github" +cvmsg_011="Gitlab" +cvmsg_012="Forgejo" +