diff --git a/bin/bootstrap.sh b/bin/bootstrap.sh index 9dedfaa..3138b77 100755 --- a/bin/bootstrap.sh +++ b/bin/bootstrap.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# bootstrap.sh +# Script: bootstrap.sh +# Description: Script para bootstrap.sh +# Created: 2025/03/19 11:57:08 # Modified: 2025/03/15 16:30:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. ] +# [Author] Mauro Rosero P. +# +# 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 @@ -17,17 +21,34 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib -#baselib_test +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" + +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" + +# Variables globales +title="${head_000} ${head_002}" load_bootstrap_msg() { @@ -188,12 +209,3 @@ display_devstools_header "- $bomsg_000" # Run install with sudo (sin parámetros específicos) sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG" -result=$? - -# Run install ansible with regular user -#if [ $result -eq 0 ] -#then - # Load bootstrap bash library -# source $BIN_HOME/$BIN_LIBS/bootstrap.lib -# ansible_install -#fi diff --git a/bin/cortana_install.sh b/bin/claude_install.sh similarity index 73% rename from bin/cortana_install.sh rename to bin/claude_install.sh index 4f718a0..1e44c4b 100755 --- a/bin/cortana_install.sh +++ b/bin/claude_install.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# cortana_install.sh -# Modified: 2024/12/01 15:27:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. (mauro.rosero@gmail.com)] +# Script: claude_install.sh +# Description: Script para instalar o desinstalar Anthropoc Claude Code con npm +# Created: 2024/12/01 15:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -19,28 +23,37 @@ # Script para instalar o desinstalar Anthropoc Claude Code con npm # Uso: -# ./script.sh -> Instalación -# ./script.sh -u -> Desinstalación +# ./claude_install.sh -> Instalación +# ./claude_install -u -> Desinstalación -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib -#baselib_test +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -# Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" title="${head_000} ${head_002}" - # Verificar que 'dialog' esté instalado if ! command -v dialog &>/dev/null; then echo "${npm_001}" @@ -50,10 +63,10 @@ fi # Verificar que 'npm' esté instalado if ! command -v npm &>/dev/null; then dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_022}" 7 50 - exit 1 + ${BIN_HOME}/${BIN_BASE}/npm_install.sh fi -# Función para preparar pre-requisitos para instalación de Cortana +# Función para preparar pre-requisitos para instalación de Claude Code pre_anthropic() { # First, save a list of your existing global packages for later migration npm list -g --depth=0 > ~/npm-global-packages.txt @@ -95,7 +108,7 @@ pre_anthropic() { # Función para instalar Anthropoc Claude Code install_anthropic() { - dialog --backtitle "${title}" --title "${npm_018} ${npm_000} ${npm_000_1}" --msgbox "${npm_023}" 7 60 + dialog --backtitle "${title}" --title "${npm_018}" --msgbox "${npm_023}" 7 60 # Ejecutar la instalación pre_anthropic npm install -g @anthropic-ai/claude-code @@ -109,7 +122,7 @@ install_anthropic() { # Función para desinstalar Anthropoc Claude Code uninstall_anthropic() { - dialog --backtitle "${title}" --title "${npm_026} ${npm_000} ${npm_000_1}" --msgbox "${npm_027}" 7 60 + dialog --backtitle "${title}" --title "${npm_026}" --msgbox "${npm_027}" 7 60 # Ejecutar la desinstalación npm uninstall -g @anthropic-ai/claude-code if [[ $? -eq 0 ]]; then @@ -127,6 +140,7 @@ if [[ "$1" == "-u" ]]; then uninstall_anthropic else dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 + clear exit 1 fi else @@ -135,7 +149,11 @@ else install_anthropic else dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 + clear exit 1 fi fi +# Limpiar consola +clear + diff --git a/bin/cortana_alias.sh b/bin/cortana_alias.sh index acacef3..397cb68 100755 --- a/bin/cortana_alias.sh +++ b/bin/cortana_alias.sh @@ -1,20 +1,4 @@ #!/bin/bash -# Source de head.es para cargar los mensajes -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_LANG=${LANG:0:2} - -# Intentar cargar mensajes (si es posible) -if [ -f "$BIN_HOME/$BIN_LIBS/base.lib" ] && [ -f "$BIN_HOME/$BIN_MESG/head.$BIN_LANG" ]; then - source "$BIN_HOME/$BIN_LIBS/base.lib" - load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" - USE_MESSAGES=true -else - USE_MESSAGES=false -fi - # Verificar si ~/.npm-global/bin está en el PATH if [[ ":$PATH:" != *":$HOME/.npm-global/bin:"* ]]; then # Si no está en el PATH, usamos la ruta completa en el alias @@ -23,10 +7,4 @@ else # Si está en el PATH, podemos usar el nombre directamente alias cortana="claude" fi - -# Mostrar el mensaje usando variables si están disponibles -if [ "$USE_MESSAGES" = true ]; then - echo "${npm_046}" -else - echo "Alias cortana activado en la sesión actual." -fi +echo "Alias cortana activado en la sesión actual." diff --git a/bin/cortana_disable.sh b/bin/cortana_disable.sh index d82a4e4..263cbc3 100755 --- a/bin/cortana_disable.sh +++ b/bin/cortana_disable.sh @@ -1,8 +1,10 @@ -#!/bin/bash -# -# cortana_disable.sh +# Script: cortana_disable.sh +# Description: # Script para desactivar el alias 'cortana' para Claude Code +# Created: 2025/03/19 11:57:08 # Modified: 2025/03/11 12:00:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. (mauro.rosero@gmail.com)] +# [Author] Mauro Rosero P. +# +# 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 @@ -20,22 +22,34 @@ # Script para desactivar el alias 'cortana' para Claude Code # Uso: # ./cortana_disable.sh +# Nota: no usa console.lib, ni console.es -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -# Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" title="${head_000} ${head_002}" # Verificar que 'dialog' esté instalado @@ -62,4 +76,7 @@ if [[ $? -eq 0 ]]; then else dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 exit 1 -fi \ No newline at end of file +fi + +# Limpiar consola +clear diff --git a/bin/cortana_enable.sh b/bin/cortana_enable.sh index b267045..66e627c 100755 --- a/bin/cortana_enable.sh +++ b/bin/cortana_enable.sh @@ -1,8 +1,10 @@ -#!/bin/bash -# -# cortana_enable.sh +# Script: cortana_enable.sh +# Description: # Script para activar el alias 'cortana' para Claude Code +# Created: 2025/03/19 11:57:08 # Modified: 2025/03/11 12:00:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. (mauro.rosero@gmail.com)] +# [Author] Mauro Rosero P. +# +# 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 @@ -17,30 +19,43 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -# Script para activar el alias 'cortana' para Claude Code +# Script para desactivar el alias 'cortana' para Claude Code # Uso: # ./cortana_enable.sh +# Nota: no usa console.lib, ni console.es -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -# Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" title="${head_000} ${head_002}" # Verificar que 'dialog' esté instalado if ! command -v dialog &>/dev/null; then echo "${npm_001}" + clear exit 1 fi @@ -68,5 +83,11 @@ if [[ $? -eq 0 ]]; then dialog --backtitle "${title}" --title "${npm_036}" --msgbox "${npm_037}\n\n${npm_047}\n\nsource $ALIAS_FILE\n\n" 10 70 else dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 + clear exit 1 -fi \ No newline at end of file +fi + +# Limpiar consola +clear + + diff --git a/bin/cortana_token.sh b/bin/cortana_token.sh index 7c3f7ce..b6aec8a 100755 --- a/bin/cortana_token.sh +++ b/bin/cortana_token.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# cortana_token.sh -# Modified: 2025-03-12 20:26:07 -# Derechos de Autor (C) [2025] [Mauro Rosero P. (mauro.rosero@gmail.com)] +# Script: cortana_token.sh +# Description: Script para encriptar el token de Claude Code usando SOPS +# Created: 2025/03/12 20:26:07 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,23 +21,35 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -# Script para encriptar el token de Cortana (Claude Code) usando SOPS +# Script para encriptar el token de Cortana (Claude Code) para Cortana usando SOPS +# Cortana Token se utiliza para la agente Cortana que es la asistente para los desarrolladores -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -# Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" title="${head_000} ${head_002}" check_dependencies() { @@ -149,10 +165,11 @@ main() { dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} ${HOME}/.cortana/cortana.sops.yaml" 7 70 else dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50 + clear exit 1 fi } # Execute main function main -exit 0 \ No newline at end of file +exit 0 diff --git a/bin/cortana_unalias.sh b/bin/cortana_unalias.sh new file mode 100755 index 0000000..d3cd992 --- /dev/null +++ b/bin/cortana_unalias.sh @@ -0,0 +1,3 @@ +#!/bin/bash +unalias cortana 2>/dev/null +echo "Alias cortana desactivado en la sesión actual." diff --git a/bin/cversadm_token.sh b/bin/cversadm_token.sh deleted file mode 100755 index 51b096d..0000000 --- a/bin/cversadm_token.sh +++ /dev/null @@ -1,250 +0,0 @@ -#!/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 -# Usar DEVELOPER_DIR de base.lib -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto -if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then - DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") -else - DEVSPATH="devs" -fi - -BIN_HOME="$HOME/$DEVSPATH" -BIN_BASE="bin" -BIN_LIBS="lib" -BIN_MESG="msg" - -# Definir variables necesarias para uso en funciones -head_error="ERROR" -head_exit="Salir" -head_key_end="END" - -# Importar bibliotecas necesarias -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" - -# CHECK SHELL LANGUAGE -BIN_LANG=${LANG:0:2} - -# Cargar mensajes en el idioma del sistema o español por defecto -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers" - -# Variables globales -title="${head_000} ${head_002}" -apps_title="${cvmsg_000}" - -# Función para verificar si SOPS está instalado -check_sops_installed() { - if ! command -v sops &> /dev/null; then - # Mostrar el error usando dialog con mensaje desde developers.es - dialog_error_box "${head_error}" "${cvmsg_013}. ${cvmsg_014}" - clear - exit 1 - fi -} - -# Función para asegurar que el directorio .developer existe -ensure_developers_dir() { - if [ ! -d "$DEVELOPER_DIR" ]; then - mkdir -p "$DEVELOPER_DIR" - chmod 700 "$DEVELOPER_DIR" - echo "${cvmsg_008} $DEVELOPER_DIR" - fi -} - -# Función para seleccionar la plataforma de control de versiones usando menu_actions -select_platform() { - # Preparar opciones para menu_actions - local menu_options="1:${cvmsg_010} -2:${cvmsg_011} -3:${cvmsg_012} - - - -" - - # Usar menu_actions en lugar de dialog_input_menu - local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9) - - # Verificar si hubo cancelación o error - if [ "$selection" = "${head_key_end}" ]; then - return 1 - fi - - # Interpretar la selección - case $selection in - 1) echo "github" ;; - 2) echo "gitlab" ;; - 3) echo "forgejo" ;; - *) return 1 ;; - esac - - return 0 -} - -# 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}" ;; - "gitlab") platform_name="${cvmsg_011}" ;; - "forgejo") platform_name="${cvmsg_012}" ;; - esac - - # Bucle para validación de token usando dialog directamente - while true; do - # Usar dialog directamente en lugar de dialog_input_pass - token=$(dialog --backtitle "$title" --stdout --title "${cvmsg_003}" \ - --passwordbox "${cvmsg_004} $platform_name\n${cvmsg_005}" 8 60) - - # Verificar si el usuario canceló - if [ $? -ne 0 ]; then - clear - return 1 - fi - - # Validar token - if [ -z "$token" ]; then - dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_015}" 7 60 - continue - fi - - # Verificar longitud (debería tener al menos 30 caracteres) - if [ ${#token} -lt 30 ]; then - dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_016}" 7 60 - continue - fi - - # Verificar formato (debería contener caracteres alfanuméricos y algunos especiales) - if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then - dialog --backtitle "$title" --title "${head_warning}" --msgbox "${cvmsg_017}" 7 60 - fi - - # Token válido - break - done - - echo "$token" - return 0 -} - -# Función para guardar el token encriptado con SOPS -save_token() { - local platform=$1 - local token=$2 - local filename="${DEVELOPER_DIR}/${platform}.sops.yaml" - local token_file="/tmp/vcs_token_$$" - - # 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 "$token_file" > "$filename" - local result=$? - - # Eliminar archivo temporal - rm -f "$token_file" - - # Establecer permisos adecuados (solo lectura para el propietario) - if [ $result -eq 0 ]; then - chmod 600 "$filename" - fi - - return $result -} - -# Verificar si dialog está instalado -check_dialog_installed() { - if ! command -v dialog &> /dev/null; then - echo "${head_001}" - exit 1 - fi -} - -# Función principal -main() { - # Verificar requisitos - check_dialog_installed - check_sops_installed - ensure_developers_dir - - # Asegurar que head_000 y head_002 estén definidos para el título - if [ -z "$head_000" ] || [ -z "$head_002" ]; then - head_000="MRDevs" - head_002="Tools" - fi - - # Mostrar título inicial - display_text_header - - # 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/cversion_token.sh b/bin/cversion_token.sh index c62e8e0..521f8fa 100755 --- a/bin/cversion_token.sh +++ b/bin/cversion_token.sh @@ -77,7 +77,7 @@ ensure_developers_dir() { # Función para seleccionar la plataforma de control de versiones usando menu_actions select_platform() { # Preparar opciones para menu_actions - local menu_options="1:${cvmsg_010} 2:${cvmsg_011} 3:${cvmsg_012}" + local menu_options="1:${cvmsg_010}\n2:${cvmsg_011}\n3:${cvmsg_012}" # Usar menu_actions en lugar de dialog_input_menu local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9) @@ -191,17 +191,7 @@ main() { check_dialog_installed check_sops_installed ensure_developers_dir - - # Asegurar que head_000 y head_002 estén definidos para el título - if [ -z "$head_000" ] || [ -z "$head_002" ]; then - head_000="MRDevs" - head_002="Tools" - fi - - # Mostrar título inicial usando funciones de console.lib - # Reemplazamos display_text_header por un diálogo de inicio - dialog_error_box "$title" "$apps_title - ${head_version} $VERSION" - + # Seleccionar plataforma platform=$(select_platform) if [ $? -ne 0 ]; then diff --git a/bin/fj_login.sh b/bin/fj_login.sh deleted file mode 100755 index c630751..0000000 --- a/bin/fj_login.sh +++ /dev/null @@ -1,185 +0,0 @@ -#!/bin/bash -# -# Script: fj_login.sh -# Description: Script para autenticación con Forgejo usando tokens encriptados -# 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 -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto -if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then - DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") -else - DEVSPATH="devs" -fi - -BIN_HOME="$HOME/$DEVSPATH" -BIN_BASE="bin" -BIN_LIBS="lib" -BIN_MESG="msg" - -# CHECK SHELL LANGUAGE -BIN_LANG=${LANG:0:2} - -# Importar bibliotecas necesarias -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" - -# Cargar mensajes en el idioma del sistema o español por defecto -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" - -# Variables globales -title="${head_000} ${head_002}" - -# Función para verificar si berg está instalado -check_berg_installed() { - if ! command -v berg &> /dev/null; then - echo "Error: berg (Forgejo CLI) no está instalado. Por favor, ejecute bin/fjcli_install.sh primero." - exit 1 - fi -} - -# 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, ejecute bin/bootstrap.sh para instalar las herramientas necesarias." - exit 1 - fi -} - -# Función para extraer la URL base de Forgejo de la configuración de git -get_forgejo_url() { - # Intentar obtener URL desde la configuración global de git - local remote_url=$(git config --get remote.origin.url 2>/dev/null) - - # Si no se encuentra en la configuración global, intentar buscar en el directorio actual - if [ -z "$remote_url" ] && [ -d ".git" ]; then - remote_url=$(git config --get remote.origin.url 2>/dev/null) - fi - - # Si aún no tenemos URL, intentar buscar en algún repositorio de $HOME - if [ -z "$remote_url" ]; then - # Buscar repositorios en $HOME que podrían tener remotes de Forgejo - for repo_dir in $(find $HOME -name ".git" -type d -maxdepth 3 2>/dev/null); do - local repo_path=$(dirname "$repo_dir") - cd "$repo_path" - local url=$(git config --get remote.origin.url 2>/dev/null) - if [[ "$url" == *"forgejo"* ]] || [[ "$url" == *"codeberg"* ]] || [[ "$url" == *"gitt.rosero"* ]]; then - remote_url="$url" - break - fi - done - fi - - # Si encontramos una URL, extraer el dominio base - if [ -n "$remote_url" ]; then - # Eliminar protocolo (http:// o https://) - local base_url=$(echo "$remote_url" | sed -E 's|^(https?://)?([^/]+).*|\2|') - - # Si el formato es usuario@dominio, extraer solo el dominio - if [[ "$base_url" == *"@"* ]]; then - base_url=$(echo "$base_url" | cut -d '@' -f2) - fi - - # Devolver solo el dominio sin protocolo - echo "$base_url" - else - # Si no se encontró ninguna URL, devolver una cadena vacía - echo "" - fi -} - -# Estas funciones han sido eliminadas, ya no se crean ni eliminan alias -# Los usuarios pueden crear su propio alias manualmente si lo desean - -# Función para iniciar sesión con token -login() { - # Verificar que el archivo de token encriptado existe - if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then - echo "Error: No se encontró el archivo de token para Forgejo." - echo "Por favor, ejecute bin/cversadm_token.sh para configurar el token primero." - exit 1 - fi - - # Decodificar el token de base64 - local token=$(sops -d ${DEVELOPER_DIR}/forgejo.sops.yaml | grep -oP '(?<=token: ).*' | base64 -d) - - # Obtener la URL base de Forgejo - local forgejo_url=$(get_forgejo_url) - - if [ -n "$forgejo_url" ]; then - echo "Usando servidor Forgejo: $forgejo_url" - export BERG_BASE_URL="$forgejo_url" - else - echo "ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo." - echo "Si la autenticación falla, establezca manualmente BERG_BASE_URL." - fi - - # Iniciar sesión con berg - echo "Iniciando sesión en Forgejo..." - berg auth login -t "$token" - local login_status=$? - - if [ $login_status -eq 0 ]; then - echo "Sesión iniciada correctamente en Forgejo." - else - echo "Error al iniciar sesión en Forgejo. Por favor, verifique su token." - exit 1 - fi -} - -# Función para cerrar sesión -logout() { - # Obtener la URL base de Forgejo - local forgejo_url=$(get_forgejo_url) - - if [ -n "$forgejo_url" ]; then - echo "Usando servidor Forgejo: $forgejo_url" - export BERG_BASE_URL="$forgejo_url" - fi - - # Ya no se eliminan alias - - echo "Cerrando sesión de Forgejo..." - if ! berg auth status &>/dev/null; then - echo "No hay sesión activa en Forgejo." - else - berg auth logout -s 2>/dev/null || true - echo "Sesión cerrada." - fi -} - -# Función principal -main() { - # Verificar requisitos - check_berg_installed - check_sops_installed - - # Verificar parámetros - if [ "$1" = "--logout" ]; then - logout - else - login - fi -} - -# Ejecutar función principal con los parámetros recibidos -main "$@" diff --git a/bin/fjcli_install.sh b/bin/fjcli_install.sh deleted file mode 100755 index d65f9a7..0000000 --- a/bin/fjcli_install.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash -# ------------------------------------------------------------------ -# [Author] Cortana Rosero One -# [Title] fjcli_install.sh - Instalador de forgejo-cli -# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) -# -# AGPL License -# Modified date: 14/03/2025 -# ------------------------------------------------------------------ - -# Función para verificar si cargo está instalado -check_cargo() { - if ! command -v cargo &> /dev/null; then - echo "Cargo no está instalado. Instalando Rust y Cargo..." - curl https://sh.rustup.rs -sSf | sh - source "$HOME/.cargo/env" - echo "Rust y Cargo han sido instalados correctamente." - else - echo "Cargo ya está instalado." - fi -} - -# Función para verificar si codeberg-cli está instalado -check_codeberg_cli() { - if ! command -v codeberg &> /dev/null; then - echo "codeberg-cli no está instalado. Instalando..." - - # Verificar que cargo esté disponible - if ! command -v cargo &> /dev/null; then - echo "ERROR: No se pudo encontrar cargo en el PATH después de la instalación." - echo "Por favor reinicie su terminal e intente nuevamente." - exit 1 - fi - - # Instalar codeberg-cli - cargo install codeberg-cli - - if [ $? -eq 0 ]; then - echo "codeberg-cli instalado correctamente." - else - echo "ERROR: No se pudo instalar codeberg-cli." - exit 1 - fi - else - echo "codeberg-cli ya está instalado." - fi -} - -# Verificar si cargo está instalado -check_cargo - -echo "Preparando instalación de forgejo-cli..." - -# Instalar codeberg-cli si no está instalado -check_codeberg_cli - -echo "Instalación completada." - -exit 0 \ No newline at end of file diff --git a/bin/ghadmin_install.sh b/bin/ghadmin_install.sh index 574f3cf..3c87ed8 100755 --- a/bin/ghadmin_install.sh +++ b/bin/ghadmin_install.sh @@ -71,6 +71,7 @@ check_root() { exit $? else echo "${ghmsg_005}" + clear exit 1 fi fi @@ -111,6 +112,7 @@ install_gh_debian() { echo "${ghmsg_008}" else echo "${ghmsg_009}" + clear exit 1 fi } @@ -128,6 +130,7 @@ install_gh_redhat() { echo "${ghmsg_008}" else echo "${ghmsg_009}" + clear exit 1 fi } @@ -143,6 +146,7 @@ install_gh_arch() { echo "${ghmsg_008}" else echo "${ghmsg_009}" + clear exit 1 fi } @@ -159,6 +163,7 @@ install_gh_suse() { echo "${ghmsg_008}" else echo "${ghmsg_009}" + clear exit 1 fi } @@ -180,6 +185,7 @@ install_gh_macos() { echo "${ghmsg_008}" else echo "${ghmsg_009}" + clear exit 1 fi } @@ -252,12 +258,10 @@ main() { dialog_error_box "${head_error}" "${ghmsg_023}" exit 1 fi + + clear } # Ejecutar función principal main "$@" - -# Limpiar la pantalla al finalizar -clear - exit 0 diff --git a/bin/ghcli_install.sh b/bin/ghcli_install.sh deleted file mode 100755 index b840741..0000000 --- a/bin/ghcli_install.sh +++ /dev/null @@ -1,212 +0,0 @@ -#!/bin/bash -# ------------------------------------------------------------------ -# [Author] Cortana Rosero One -# [Title] ghcli_install.sh - Instalador de GitHub CLI -# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) -# -# AGPL License -# Modified date: 14/03/2025 -# ------------------------------------------------------------------ - -# Función para verificar si se está ejecutando como root -check_root() { - if [ "$(id -u)" -ne 0 ]; then - echo "Este script requiere privilegios de administrador." - echo "Intentando escalar privilegios..." - - # Verificar si sudo está disponible - if command -v sudo &> /dev/null; then - echo "Usando sudo para escalar privilegios..." - sudo "$0" "$@" - exit $? - elif command -v doas &> /dev/null; then - echo "Usando doas para escalar privilegios..." - doas "$0" "$@" - exit $? - else - echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root." - exit 1 - fi - fi -} - -# Función para detectar la distribución -detect_distro() { - if [ -f /etc/os-release ]; then - . /etc/os-release - DISTRO=$ID - elif type lsb_release >/dev/null 2>&1; then - DISTRO=$(lsb_release -si | tr '[:upper:]' '[:lower:]') - elif [ -f /etc/lsb-release ]; then - . /etc/lsb-release - DISTRO=$DISTRIB_ID - elif [ -f /etc/debian_version ]; then - DISTRO="debian" - else - DISTRO=$(uname -s) - fi - - echo "Distribución detectada: $DISTRO" -} - -# Función para instalar GitHub CLI en sistemas basados en Debian/Ubuntu -install_gh_debian() { - echo "Instalando GitHub CLI en sistema basado en Debian/Ubuntu..." - - # Añadir repositorio de GitHub CLI - type -p curl >/dev/null || apt update && apt install curl -y - curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ - && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ - && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ - && apt update \ - && apt install gh -y - - if [ $? -eq 0 ]; then - echo "GitHub CLI instalado correctamente." - else - echo "ERROR: No se pudo instalar GitHub CLI." - exit 1 - fi -} - -# Función para instalar GitHub CLI en sistemas basados en Red Hat/Fedora -install_gh_redhat() { - echo "Instalando GitHub CLI en sistema basado en Red Hat/Fedora..." - - # Añadir repositorio de GitHub CLI - dnf install -y dnf-plugins-core - dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo - dnf install -y gh - - if [ $? -eq 0 ]; then - echo "GitHub CLI instalado correctamente." - else - echo "ERROR: No se pudo instalar GitHub CLI." - exit 1 - fi -} - -# Función para instalar GitHub CLI en Arch Linux -install_gh_arch() { - echo "Instalando GitHub CLI en Arch Linux..." - - # Instalar GitHub CLI desde los repositorios oficiales - pacman -Sy --noconfirm gh - - if [ $? -eq 0 ]; then - echo "GitHub CLI instalado correctamente." - else - echo "ERROR: No se pudo instalar GitHub CLI." - exit 1 - fi -} - -# Función para instalar GitHub CLI en sistemas basados en SUSE -install_gh_suse() { - echo "Instalando GitHub CLI en sistema basado en SUSE..." - - # Añadir repositorio de GitHub CLI - zypper addrepo --refresh https://cli.github.com/packages/rpm/gh-cli.repo - zypper install -y gh - - if [ $? -eq 0 ]; then - echo "GitHub CLI instalado correctamente." - else - echo "ERROR: No se pudo instalar GitHub CLI." - exit 1 - fi -} - -# Función para instalar GitHub CLI en macOS -install_gh_macos() { - echo "Instalando GitHub CLI en macOS..." - - # Verificar si Homebrew está instalado - if ! command -v brew &> /dev/null; then - echo "Homebrew no está instalado. Instalando Homebrew..." - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - fi - - # Instalar GitHub CLI - brew install gh - - if [ $? -eq 0 ]; then - echo "GitHub CLI instalado correctamente." - else - echo "ERROR: No se pudo instalar GitHub CLI." - exit 1 - fi -} - -# Función para verificar si gh está instalado -check_gh() { - if command -v gh &> /dev/null; then - echo "GitHub CLI ya está instalado." - echo "Versión actual:" - gh --version - read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL - if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then - echo "Operación cancelada." - exit 0 - fi - fi -} - -# Función principal -main() { - # Verificar si ya está instalado - check_gh - - # Verificar privilegios de root (excepto en macOS) - if [ "$(uname -s)" != "Darwin" ]; then - check_root "$@" - fi - - # Detectar la distribución - detect_distro - - # Instalar según la distribución - case $DISTRO in - ubuntu|debian|linuxmint|pop|elementary) - install_gh_debian - ;; - fedora|rhel|centos|rocky|almalinux) - install_gh_redhat - ;; - arch|manjaro|endeavouros) - install_gh_arch - ;; - opensuse*|suse|sles) - install_gh_suse - ;; - darwin) - install_gh_macos - ;; - *) - echo "Distribución no soportada: $DISTRO" - echo "Por favor, visite https://github.com/cli/cli#installation para instrucciones de instalación manual." - exit 1 - ;; - esac - - # Verificar la instalación - if command -v gh &> /dev/null; then - echo "GitHub CLI instalado correctamente." - gh --version - - # Sugerir autenticación - echo "" - echo "Para autenticarse con GitHub, ejecute:" - echo "gh auth login" - echo "" - echo "Para más información, visite: https://cli.github.com/manual/" - else - echo "ERROR: La instalación de GitHub CLI falló." - exit 1 - fi -} - -# Ejecutar función principal -main "$@" - -exit 0 \ No newline at end of file diff --git a/bin/glcli_install.sh b/bin/glcli_install.sh deleted file mode 100755 index ba7cb18..0000000 --- a/bin/glcli_install.sh +++ /dev/null @@ -1,450 +0,0 @@ -#!/bin/bash -# ------------------------------------------------------------------ -# [Author] Cortana Rosero One -# [Title] glcli_install.sh - Instalador de GitLab CLI -# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) -# -# AGPL License -# Modified date: 14/03/2025 -# ------------------------------------------------------------------ - -# Función para verificar si se está ejecutando como root -check_root() { - if [ "$(id -u)" -ne 0 ]; then - echo "Este script requiere privilegios de administrador." - echo "Intentando escalar privilegios..." - - # Verificar si sudo está disponible - if command -v sudo &> /dev/null; then - echo "Usando sudo para escalar privilegios..." - sudo "$0" "$@" - exit $? - elif command -v doas &> /dev/null; then - echo "Usando doas para escalar privilegios..." - doas "$0" "$@" - exit $? - else - echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root." - exit 1 - fi - fi -} - -# Función para detectar la distribución -detect_distro() { - if [ -f /etc/os-release ]; then - . /etc/os-release - DISTRO=$ID - elif type lsb_release >/dev/null 2>&1; then - DISTRO=$(lsb_release -si | tr '[:upper:]' '[:lower:]') - elif [ -f /etc/lsb-release ]; then - . /etc/lsb-release - DISTRO=$DISTRIB_ID - elif [ -f /etc/debian_version ]; then - DISTRO="debian" - else - DISTRO=$(uname -s) - fi - - echo "Distribución detectada: $DISTRO" -} - -# Función para instalar glab mediante Homebrew en macOS y Linux -install_glab_homebrew() { - echo "Instalando GitLab CLI mediante Homebrew..." - - # Verificar si Homebrew está instalado - if ! command -v brew &> /dev/null; then - echo "Homebrew no está instalado. Instalando Homebrew..." - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - - # Verificar si la instalación fue exitosa - if ! command -v brew &> /dev/null; then - echo "ERROR: No se pudo instalar Homebrew." - return 1 - fi - fi - - # Instalar GitLab CLI - brew install gitlab-glab/tap/glab - - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante Homebrew." - return 0 - else - echo "ERROR: No se pudo instalar GitLab CLI mediante Homebrew." - return 1 - fi -} - -# Función para instalar glab en sistemas basados en Debian/Ubuntu -install_glab_debian() { - echo "Instalando GitLab CLI en sistema basado en Debian/Ubuntu..." - - # Verificar si curl está instalado - if ! command -v curl &> /dev/null; then - apt update && apt install -y curl - fi - - # Intentar primero usando los paquetes del sistema si están disponibles - if command -v apt &> /dev/null; then - echo "Verificando si glab está disponible en los repositorios..." - apt-cache search --names-only "^glab$" 2>/dev/null | grep -q "^glab" - if [ $? -eq 0 ]; then - echo "GitLab CLI encontrado en los repositorios. Instalando..." - apt update && apt install -y glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente desde los repositorios oficiales." - return 0 - fi - fi - fi - - # Si no está en los repositorios, usar el script oficial - if command -v gpg &> /dev/null; then - echo "Agregando repositorio oficial de GitLab..." - curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante script oficial." - return 0 - fi - fi - - # Si el método anterior falla, probar con Homebrew - echo "Intentando instalar mediante Homebrew..." - install_glab_homebrew - return $? -} - -# Función para instalar glab en sistemas basados en Red Hat/Fedora -install_glab_redhat() { - echo "Instalando GitLab CLI en sistema basado en Red Hat/Fedora..." - - # Verificar si dnf está instalado - if command -v dnf &> /dev/null; then - # Verificar si glab está disponible en los repositorios - echo "Verificando si glab está disponible en los repositorios..." - dnf list glab &>/dev/null - if [ $? -eq 0 ]; then - echo "GitLab CLI encontrado en los repositorios. Instalando..." - dnf install -y glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente desde los repositorios oficiales." - return 0 - fi - fi - - # Si no está en los repositorios, usar el script oficial - if command -v gpg &> /dev/null; then - echo "Usando script oficial de instalación..." - curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante script oficial." - return 0 - fi - fi - - # Si el método anterior falla, probar con snap - if command -v snap &> /dev/null; then - echo "Intentando instalar mediante snap..." - snap install glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante snap." - return 0 - fi - fi - # Si dnf no está disponible, pero yum sí - elif command -v yum &> /dev/null; then - # Verificar si glab está disponible en los repositorios - echo "Verificando si glab está disponible en los repositorios..." - yum list glab &>/dev/null - if [ $? -eq 0 ]; then - echo "GitLab CLI encontrado en los repositorios. Instalando..." - yum install -y glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente desde los repositorios oficiales." - return 0 - fi - fi - fi - - # Si los métodos anteriores fallan, probar con Homebrew - echo "Intentando instalar mediante Homebrew..." - install_glab_homebrew - return $? -} - -# Función para instalar glab en Arch Linux -install_glab_arch() { - echo "Instalando GitLab CLI en Arch Linux..." - - # Intentar primero usando el repositorio oficial - if command -v pacman &> /dev/null; then - # Verificar si glab está en los repositorios - if pacman -Ss glab | grep -q "^community/glab"; then - pacman -Sy --noconfirm glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente desde los repositorios oficiales." - return 0 - fi - fi - - # Si no está en los repositorios, intentar con yay (AUR) - if command -v yay &> /dev/null; then - yay -S --noconfirm glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente desde AUR." - return 0 - fi - fi - fi - - # Si los métodos anteriores fallan, probar con Homebrew - echo "Intentando instalar mediante Homebrew..." - install_glab_homebrew - return $? -} - -# Función para instalar glab en sistemas basados en SUSE -install_glab_suse() { - echo "Instalando GitLab CLI en sistema basado en SUSE..." - - # Intentar primero usando el script oficial - if command -v gpg &> /dev/null; then - echo "Usando script oficial de instalación..." - curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante script oficial." - return 0 - fi - fi - - # Si el método anterior falla, probar con snap - if command -v snap &> /dev/null; then - echo "Intentando instalar mediante snap..." - snap install glab - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante snap." - return 0 - fi - fi - - # Si los métodos anteriores fallan, probar con Homebrew - echo "Intentando instalar mediante Homebrew..." - install_glab_homebrew - return $? -} - -# Función para instalar directamente usando Go -install_glab_go() { - echo "Intentando instalar GitLab CLI mediante Go..." - - # Verificar si Go está instalado - if ! command -v go &> /dev/null; then - echo "Go no está instalado. Se requiere Go para este método de instalación." - return 1 - fi - - # Instalar GitLab CLI mediante Go - go install gitlab.com/gitlab-org/cli/cmd/glab@main - - if [ $? -eq 0 ]; then - echo "GitLab CLI instalado correctamente mediante Go." - echo "Asegúrese de que \$GOPATH/bin esté en su PATH." - echo "Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:" - echo "export PATH=\$PATH:\$HOME/go/bin" - return 0 - else - echo "ERROR: No se pudo instalar GitLab CLI mediante Go." - return 1 - fi -} - -# Función para instalar usando método binario genérico -install_glab_binary() { - echo "Instalando GitLab CLI usando binarios precompilados..." - - # Crear directorio temporal - TMP_DIR=$(mktemp -d) - cd "$TMP_DIR" || return 1 - - # Detectar arquitectura - ARCH=$(uname -m) - case "$ARCH" in - x86_64) - ARCH="amd64" - ;; - aarch64|arm64) - ARCH="arm64" - ;; - *) - echo "Arquitectura no soportada: $ARCH" - return 1 - ;; - esac - - # Detectar sistema operativo - OS=$(uname -s | tr '[:upper:]' '[:lower:]') - - # Obtener la última versión - LATEST_VERSION=$(curl -s https://api.github.com/repos/profclems/glab/releases/latest | grep "tag_name" | cut -d'"' -f4) - if [ -z "$LATEST_VERSION" ]; then - LATEST_VERSION="v1.25.0" # Versión de respaldo si no se puede obtener la última - fi - - # Construir URL de descarga - DOWNLOAD_URL="https://github.com/profclems/glab/releases/download/${LATEST_VERSION}/glab_${LATEST_VERSION:1}_${OS}_${ARCH}.tar.gz" - - echo "Descargando GitLab CLI desde: $DOWNLOAD_URL" - - # Descargar y extraer - curl -L "$DOWNLOAD_URL" -o glab.tar.gz - if [ $? -ne 0 ]; then - echo "ERROR: No se pudo descargar GitLab CLI." - cd - > /dev/null - rm -rf "$TMP_DIR" - return 1 - fi - - tar xzf glab.tar.gz - if [ $? -ne 0 ]; then - echo "ERROR: No se pudo extraer el archivo de GitLab CLI." - cd - > /dev/null - rm -rf "$TMP_DIR" - return 1 - fi - - # Instalar binario - mv bin/glab /usr/local/bin/glab - chmod +x /usr/local/bin/glab - - # Limpiar - cd - > /dev/null - rm -rf "$TMP_DIR" - - # Verificar instalación - if command -v glab &> /dev/null; then - echo "GitLab CLI instalado correctamente mediante binarios precompilados." - return 0 - else - echo "ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados." - return 1 - fi -} - -# Función para verificar si glab está instalado -check_glab() { - if command -v glab &> /dev/null; then - echo "GitLab CLI ya está instalado." - echo "Versión actual:" - glab --version - read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL - if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then - echo "Operación cancelada." - exit 0 - fi - fi -} - -# Función principal -main() { - # Verificar si ya está instalado - check_glab - - # Verificar privilegios de root (excepto en macOS) - if [ "$(uname -s)" != "Darwin" ]; then - check_root "$@" - fi - - # Detectar la distribución - detect_distro - - # Intentar instalar según la distribución - install_success=false - - case $DISTRO in - ubuntu|debian|linuxmint|pop|elementary|raspbian) - install_glab_debian - if [ $? -eq 0 ]; then - install_success=true - fi - ;; - fedora|rhel|centos|rocky|almalinux) - install_glab_redhat - if [ $? -eq 0 ]; then - install_success=true - fi - ;; - arch|manjaro|endeavouros) - install_glab_arch - if [ $? -eq 0 ]; then - install_success=true - fi - ;; - opensuse*|suse|sles) - install_glab_suse - if [ $? -eq 0 ]; then - install_success=true - fi - ;; - darwin) - install_glab_homebrew - if [ $? -eq 0 ]; then - install_success=true - fi - ;; - *) - echo "Distribución no soportada directamente: $DISTRO" - echo "Intentando métodos alternativos..." - ;; - esac - - # Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos - if [ "$install_success" = false ]; then - echo "Intentando métodos alternativos de instalación..." - - # Intentar instalar con Go - if command -v go &> /dev/null; then - install_glab_go - if [ $? -eq 0 ]; then - install_success=true - fi - fi - - # Si aún no se ha instalado, probar con binarios precompilados - if [ "$install_success" = false ]; then - install_glab_binary - if [ $? -eq 0 ]; then - install_success=true - fi - fi - - # Si todos los métodos fallan - if [ "$install_success" = false ]; then - echo "No se pudo instalar GitLab CLI con ninguno de los métodos disponibles." - echo "Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual." - exit 1 - fi - fi - - # Verificar la instalación - if command -v glab &> /dev/null; then - echo "GitLab CLI instalado correctamente." - glab --version - - # Sugerir autenticación - echo "" - echo "Para autenticarse con GitLab, ejecute:" - echo "glab auth login" - echo "" - echo "Para más información, visite: https://gitlab.com/gitlab-org/cli/blob/main/docs/index.md" - else - echo "ERROR: La instalación de GitLab CLI falló." - exit 1 - fi -} - -# Ejecutar función principal -main "$@" - -exit 0 \ No newline at end of file diff --git a/bin/gpg_init.sh b/bin/gpg_init.sh index 2682fa8..466a1b9 100755 --- a/bin/gpg_init.sh +++ b/bin/gpg_init.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# gpg_init.sh -# Modified: 2024/12/09 10:27:00 -# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# Script: gpg_init.sh +# Description: Script de inicialización de estructura para firma GPG +# Created: 2024/12/09 10:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,10 +21,23 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} @@ -43,8 +60,6 @@ load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" # Load gpg messages load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg" - - ########### MAIN PROGRAM ########### # Set program title diff --git a/bin/helix_install.sh b/bin/helix_install.sh index 7f11c5b..7e6c6f0 100755 --- a/bin/helix_install.sh +++ b/bin/helix_install.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# helix_install.sh -# Modified: 2025/03/11 15:00:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. (mauro.rosero@gmail.com)] +# Script: helix_install.sh +# Description: Script para instalar Helix Editor +# Created: 2025/03/11 15:00:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -21,22 +25,32 @@ # Uso: # ./helix_install.sh -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") + # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib -source $BIN_HOME/$BIN_LIBS/console.lib +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" -# Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" title="${head_000} ${head_002}" apps_title="${hx_001}" @@ -221,6 +235,10 @@ install_helix_tarball() { if [ "$EUID" -ne 0 ]; then dialog_error_box "${head_superuser}" "${hx_011}" dialog_input_pass "${npm_002}" "" "" + if [ $? -ne 0 ]; then + dialog_error_box "${head_error}" "${npm_003}" + finish + fi SUDO_PASS="$value" # Verificar que la contraseña funcione @@ -278,4 +296,4 @@ else fi # Salir -finish \ No newline at end of file +finish diff --git a/bin/jarvis_token.sh b/bin/jarvis_token.sh new file mode 100755 index 0000000..7701b6c --- /dev/null +++ b/bin/jarvis_token.sh @@ -0,0 +1,170 @@ +#!/bin/bash +# +# Script: jarvis_token.sh +# Description: Script para encriptar el Jarvis token de Claude Code usando SOPS +# Created: 2025/03/12 20:26:07 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 . + +# Script para encriptar el token de Cortana (Claude Code) para Cortana usando SOPS +# Jarvis Token se usa para el agente Jarvis a nivel de servidor de desarrollo autonomo + +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +BIN_SOPS="sops" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" + +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" +title="${head_000} ${head_002}" + + +check_dependencies() { + # Verificar que 'dialog' esté instalado + if ! command -v dialog &>/dev/null; then + echo "${npm_001}" + exit 1 + fi + + # Verificar que 'sops' esté instalado + if ! command -v sops &>/dev/null; then + dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_051}" 7 50 + exit 1 + fi +} + +encrypt_token() { + local output_file="$1" + local token="$2" + local token_file="/tmp/jarvis_token_$$" + + # Ensure directory exists + mkdir -p "${BIN_HOME}/${BIN_SOPS}" + + # Convert token to base64 + local token_base64=$(echo -n "$token" | base64) + + # Create temporary file with base64 encoded token + echo "$token_base64" > "$token_file" + + # Encrypt using sops + if sops --encrypt "$token_file" > "$output_file"; then + # Ensure secure permissions + chmod 600 "$output_file" + else + rm -f "$token_file" + return 1 + fi + + # Clean up + rm -f "$token_file" + return 0 +} + +main() { + check_dependencies + + # Ensure directory exists + mkdir -p "${BIN_HOME}/${BIN_SOPS}" + + # Get SOPS config file path + sops_file="${BIN_HOME}/${BIN_SOPS}/jarvis.sops.yaml" + + # Check if file exists and ask for confirmation to overwrite + if [ -f "$sops_file" ]; then + dialog --backtitle "$title" --title "${npm_031}" \ + --yesno "El archivo $sops_file ${npm_053}" 7 60 + + if [ $? -ne 0 ]; then + dialog --backtitle "$title" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 + clear + exit 0 + fi + fi + + # Get Jarvis token + while true; do + token=$(dialog --backtitle "$title" --stdout --title "${npm_000_0} Token" \ + --passwordbox "${npm_054} ${npm_000_0}:" 8 60) + + # Check if user canceled + if [ $? -ne 0 ]; then + clear + dialog --backtitle "$title" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 + clear + exit 0 + fi + + # Validate token + if [ -z "$token" ]; then + dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_055}" 7 60 + continue + fi + + # Check token length (should be at least 64 characters) + if [ ${#token} -lt 64 ]; then + dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_056}" 7 60 + continue + fi + + # Check token format (should contain alphanumeric characters and some special chars) + if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then + dialog --backtitle "$title" --title "${head_warning}" --msgbox "${npm_057}" 7 60 + fi + + # Token is valid + break + done + + # Clear screen before proceeding + clear + + # Encrypt the token + if encrypt_token "$sops_file" "$token"; then + dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} $sops_file" 7 70 + else + dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50 + clear + exit 1 + fi +} + +# Execute main function +main +clear +exit 0 diff --git a/bin/lib/base.lib b/bin/lib/base.lib index bff0584..50f744e 100644 --- a/bin/lib/base.lib +++ b/bin/lib/base.lib @@ -34,7 +34,7 @@ DEVELOPER_DIR=${HOME}/.developer DATENOW="$(date +"%Y-%m-%d %H:%M:%S")" DATEBAK="$(date +"%Y%m%d%H%M%S")" -FREEKV_URL=$(cat < "${BIN_HOME}/${BIN_BASE}/${CONFPATH}/freekeyval.dat") +FREEKV_URL=$(cat < "${BIN_PATH:=${BIN_HOME}}/${CONFPATH}/freekeyval.dat") FREEKV_SOPS_FILE=freekv-sops.devs.yaml DOCKER_LOCAL=dockerfile.local @@ -44,8 +44,6 @@ DOCKER_BUILD=build DOCKER_FILE=Dockerfile DOCKER_ENTRY=entrypoint.sh -VERSION="$(cat < ${BIN_HOME}/${BIN_CONF}/version)" - # Verificar si el script se está ejecutando como usuario root (superusuario) function is_root() { if [ "$(id -u)" -eq 0 ]; then diff --git a/bin/npm_install.sh b/bin/npm_install.sh index 5222827..025db6d 100755 --- a/bin/npm_install.sh +++ b/bin/npm_install.sh @@ -1,12 +1,12 @@ #!/bin/bash -# npm_install.sh -# Script interactivo para instalar Node.js y npm en múltiples sistemas operativos -# Soporta: Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew) -# Requiere: dialog -# Modified: 2025/03/09 10:27:00 -# Creado por [Cortana Rosero One ] -# Generado con inteligencia artificial Claude Source -# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# +# Script: npm_install.sh +# Description: # Script interactivo para instalar Node.js y npm en múltiples sistemas operativos +# Created: 2025/03/09 10:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -21,22 +21,32 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib -#baselib_test +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -# Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" title="${head_000} ${head_002}" # Función para limpiar la pantalla y salir diff --git a/bin/profile_backup.sh b/bin/profile_backup.sh index 68cb5aa..b36bca5 100755 --- a/bin/profile_backup.sh +++ b/bin/profile_backup.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# profile_backup.sh -# Modified: 2024/12/09 10:27:00 -# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# Script: profile_backup.sh +# Description: Script para hacer copia de seguridad del perfil del desarrollador +# Created: 2024/12/09 10:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,37 +21,48 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} # LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib #baselib_test # LOAD CONSOLE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/console.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib #consolelib_test # LOAD SQLITE3 BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/sqlite.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib #sqlitelib_test # LOAD DEVELOPERS BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/developers.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib #gpglib_test # Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "head" # Load gpg messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers" - - +load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers" ########### MAIN PROGRAM ########### diff --git a/bin/profile_restore.sh b/bin/profile_restore.sh index 43c6b09..d2ba4bf 100755 --- a/bin/profile_restore.sh +++ b/bin/profile_restore.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# profile_restore.sh -# Modified: 2024/12/15 14:27:00 -# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# Script: profile_restore.sh +# Description: para restaurar copia de seguridad del perfil del desarrollador +# Created: 2024/12/15 14:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,37 +21,48 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} # LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib #baselib_test # LOAD CONSOLE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/console.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib #consolelib_test # LOAD SQLITE3 BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/sqlite.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib #sqlitelib_test # LOAD DEVELOPERS BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/developers.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib #gpglib_test # Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "head" -# Load developers messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers" +# Load gpg messages +load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers" # Function to display help message function help() { diff --git a/bin/project_new.sh b/bin/project_new.sh index 1f599ad..fc72805 100755 --- a/bin/project_new.sh +++ b/bin/project_new.sh @@ -2,7 +2,10 @@ # # Script: project_new.sh # Description: Crea una carpeta de proyecto con la estructura requerida -# Modified: 2025-03-12 20:26:07 +# Created: 2025-03-12 20:26:07 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# # Derechos de Autor (C) [2025] [Mauro Rosero P. ] # # Este programa es software libre: usted puede redistribuirlo y/o modificarlo @@ -18,17 +21,36 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -# Directorios base +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -BASE_DIR="$(dirname "$SCRIPT_DIR")" -CONFIG_DIR="$SCRIPT_DIR/config" -LIB_DIR="$SCRIPT_DIR/lib" -MSG_DIR="$SCRIPT_DIR/msg" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" -# Cargar libraries -source "$LIB_DIR/base.lib" -source "$LIB_DIR/console.lib" -source "$MSG_DIR/head.es" +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") +CONFIG_DIR=$BIN_HOME/$BIN_CFGS +BASE_DIR=$BIN_HOME + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" + +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" +title="${head_000} ${head_002}" # Variables globales title="${head_000} ${head_002}" @@ -102,7 +124,7 @@ function get_projects_folder() { if [ -f "$CONFIG_DIR/projects.dat" ]; then PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat") else - PROJECTS_DIR_NAME="proyectos" + PROJECTS_DIR_NAME="projects" echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat" fi @@ -151,7 +173,8 @@ function request_project_name() { if [ $? -eq 0 ]; then request_project_name else - echo "${proj_007}" + dialog_error_box "$head_error" "${proj_007}" + clear exit 1 fi fi @@ -860,6 +883,10 @@ function main() { # Crear estructura del proyecto create_project_structure + + # Limpiar Consola + clear + } # Ejecutar función principal diff --git a/bin/qr_secret.sh b/bin/qr_secret.sh index 9b875e2..f626efb 100755 --- a/bin/qr_secret.sh +++ b/bin/qr_secret.sh @@ -2,11 +2,129 @@ # # Script: qr_secret.sh # Description: Extrae una contraseña secreta de una imagen QR y la guarda encriptada con SOPS +# Created: 2025/03/19 11:57:08 # Modified: 2025/03/15 19:30:00 # [Author] Cortana Rosero One # [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) # -# Derechos de Autor (C) [2025] [Mauro Rosero P. ] +# 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 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" + +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" + +# Variables globales +title="${head_000} ${head_002}" +# Script: qr_secret.sh +# Description: Extrae una contraseña secreta de una imagen QR y la guarda encriptada con SOPS +# Created: 2025/03/19 11:57:08 +# Modified: 2025/03/15 19:30:00 +# [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 +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") + +# CHECK SHELL LANGUAGE +BIN_LANG=${LANG:0:2} + +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" + +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" + +# Variables globales +title="${head_000} ${head_002}" +# Script: qr_secret.sh +# Description: Extrae una contraseña secreta de una imagen QR y la guarda encriptada con SOPS +# Created: 2025/03/19 11:57:08 +# Modified: 2025/03/15 19:30:00 +# [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 diff --git a/bin/standardize_scripts.sh b/bin/standardize_scripts.sh deleted file mode 100755 index e5e4764..0000000 --- a/bin/standardize_scripts.sh +++ /dev/null @@ -1,265 +0,0 @@ -#!/bin/bash -# -# Script: standardize_scripts.sh -# Description: Estandariza los encabezados y estructura de los scripts Bash -# Created: $(date +"%Y/%m/%d %H:%M:%S") -# Modified: $(date +"%Y/%m/%d %H:%M:%S") -# [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 -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto -if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then - DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") -else - DEVSPATH="devs" -fi - -BIN_HOME="$HOME/$DEVSPATH" -BIN_BASE="bin" -BIN_LIBS="lib" -BIN_MESG="msg" -BIN_CFGS="config" - -# CHECK SHELL LANGUAGE -BIN_LANG=${LANG:0:2} - -# Importar bibliotecas necesarias -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" -source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib" - -# Cargar mensajes en el idioma del sistema o español por defecto -load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" - -# Variables globales -title="${head_000} ${head_002} - ${head_002}" -apps_title="${head_000} - ${projmsg_007}" -HEADER_TEMPLATE="${BIN_HOME}/${BIN_BASE}/${BIN_CFGS}/bash.head" -VARIABLES_TEMPLATE="${BIN_HOME}/${BIN_BASE}/${BIN_CFGS}/bash.variables" -DEFAULT_AUTHOR="Mauro Rosero P. " -CORTANA_AUTHOR="Cortana Rosero One " -CORTANA_GENERATED="Created by Claude Code (claude-3-7-sonnet-20250219)" -TODAY=$(date +"%Y/%m/%d %H:%M:%S") - -# Función para extraer información del script existente -extract_script_info() { - local script_path="$1" - local script_name=$(basename "$script_path") - local description="" - local created_date="" - local modified_date="$TODAY" - local author="$DEFAULT_AUTHOR" - local generated_by="" - - # Extraer descripción si existe - description=$(grep -A 5 "Description:" "$script_path" | grep "Description:" | sed 's/.*Description: \(.*\)/\1/' | head -1) - if [ -z "$description" ]; then - # Intentar extraer del comentario antes de la primera función o variable - description=$(sed -n '/#.*[Ss]cript/p' "$script_path" | head -1 | sed 's/#.*[Ss]cript[^:]*: \(.*\)/\1/') - if [ -z "$description" ]; then - description="Script para $script_name" - fi - fi - - # Extraer fecha de creación si existe - created_date=$(grep -A 10 "Created:" "$script_path" | grep "Created:" | sed 's/.*Created: \(.*\)/\1/' | head -1) - if [ -z "$created_date" ]; then - created_date="$TODAY" - fi - - # Extraer fecha de modificación si existe - mod_date=$(grep -A 10 "Modified:" "$script_path" | grep "Modified:" | sed 's/.*Modified: \(.*\)/\1/' | head -1) - if [ ! -z "$mod_date" ]; then - modified_date="$mod_date" - fi - - # Extraer autor si existe - auth=$(grep -A 10 "\[Author\]" "$script_path" | grep "\[Author\]" | sed 's/.*\[Author\] \(.*\)/\1/' | head -1) - if [ ! -z "$auth" ]; then - author="$auth" - fi - - # Extraer información de generación si existe - gen=$(grep -A 10 "\[Generated\]" "$script_path" | grep "\[Generated\]" | sed 's/.*\[Generated\] \(.*\)/\1/' | head -1) - if [ ! -z "$gen" ]; then - generated_by="$gen" - elif [[ "$author" == *"Cortana"* ]]; then - generated_by="$CORTANA_GENERATED" - fi - - # Crear array con la información extraída - echo "$script_name|$description|$created_date|$modified_date|$author|$generated_by" -} - -# Función para aplicar la plantilla a un script -apply_template() { - local script_path="$1" - local info="$2" - - # Separar la información en variables - IFS='|' read -r script_name description created_date modified_date author generated_by <<< "$info" - - # Crear encabezado temporal con la información extraída - local temp_header=$(mktemp) - cat "$HEADER_TEMPLATE" > "$temp_header" - - # Reemplazar las variables en la plantilla - sed -i "s|\$SCRIPT_NAME|$script_name|g" "$temp_header" - sed -i "s|\$DESCRIPTION|$description|g" "$temp_header" - sed -i "s|\$CREATED_DATE|$created_date|g" "$temp_header" - sed -i "s|\$MODIFIED_DATE|$modified_date|g" "$temp_header" - sed -i "s|\$AUTHOR|$author|g" "$temp_header" - - if [ ! -z "$generated_by" ]; then - sed -i "s|\$GENERATED_BY|$generated_by|g" "$temp_header" - else - # Si no hay información de generación, eliminar esa línea - sed -i '/\$GENERATED_BY/d' "$temp_header" - fi - - # Extraer el cuerpo del script (todo excepto el encabezado) - local temp_body=$(mktemp) - # Encontrar línea después del encabezado (primera línea en blanco después de los comentarios iniciales) - local header_end=$(grep -n "^$" "$script_path" | head -1 | cut -d: -f1) - if [ -z "$header_end" ]; then - header_end=25 # Valor predeterminado si no se encuentra una línea en blanco - fi - - # Extraer el cuerpo del script - tail -n +$header_end "$script_path" > "$temp_body" - - # Crear el nuevo script combinando el encabezado y el cuerpo - cat "$temp_header" > "$script_path" - echo "" >> "$script_path" # Línea en blanco después del encabezado - cat "$temp_body" >> "$script_path" - - # Limpiar archivos temporales - rm -f "$temp_header" "$temp_body" - - echo "Estandarizado: $script_path" -} - -# Función para estandarizar variables comunes en el script -standardize_variables() { - local script_path="$1" - - # Buscar y reemplazar patrones comunes de variables - if grep -q "DEVSPATH=" "$script_path"; then - # Determinar dónde comienzan las variables - local var_line=$(grep -n "DEVSPATH=" "$script_path" | head -1 | cut -d: -f1) - local next_section=$(grep -n "^# " "$script_path" | awk -v start="$var_line" '$1 > start {print $1; exit}' | cut -d: -f1) - - if [ -z "$next_section" ]; then - # Si no hay otra sección, buscar la primera función - next_section=$(grep -n "^[a-zA-Z_][a-zA-Z0-9_]*().*{" "$script_path" | head -1 | cut -d: -f1) - if [ -z "$next_section" ]; then - # Si no hay función, usar el final del archivo - next_section=$(wc -l "$script_path" | awk '{print $1}') - fi - fi - - # Crear un archivo temporal con el contenido antes de las variables - local temp_before=$(mktemp) - head -n $((var_line - 1)) "$script_path" > "$temp_before" - - # Crear un archivo temporal con el contenido después de las variables - local temp_after=$(mktemp) - tail -n +$next_section "$script_path" > "$temp_after" - - # Crear el nuevo script - cat "$temp_before" > "$script_path" - cat "$VARIABLES_TEMPLATE" >> "$script_path" - echo "" >> "$script_path" # Añadir línea en blanco - cat "$temp_after" >> "$script_path" - - # Limpiar archivos temporales - rm -f "$temp_before" "$temp_after" - fi - - # Estandarizar la carga de bibliotecas - if ! grep -q "source .*base.lib" "$script_path"; then - echo -e "\n# Importar bibliotecas necesarias\nsource \"\${BIN_HOME}/\${BIN_BASE}/\${BIN_LIBS}/base.lib\"" >> "$script_path" - fi - - # Estandarizar la carga de mensajes si aún no existe - if ! grep -q "load_messages" "$script_path"; then - echo -e "\n# Cargar mensajes en el idioma del sistema o español por defecto\nload_messages \"\${BIN_HOME}/\${BIN_BASE}\" \"\${BIN_MESG}\" \"\${BIN_LANG}\" \"head\"" >> "$script_path" - fi - - # Estandarizar la definición del título si no existe - if ! grep -q "title=" "$script_path"; then - echo -e "\n# Variables globales\ntitle=\"\${head_000} \${head_002}\"" >> "$script_path" - fi -} - -# Función principal -main() { - dialog_error_box "$title" "${head_info}: ${head_002} $BIN_HOME/$BIN_BASE" - - # Verificar que existe la plantilla de encabezado - if [ ! -f "$HEADER_TEMPLATE" ]; then - dialog_error_box "$title" "${head_error}: ${head_nobuild} $HEADER_TEMPLATE" - exit 1 - fi - - # Verificar que existe la plantilla de variables - if [ ! -f "$VARIABLES_TEMPLATE" ]; then - dialog_error_box "$title" "${head_error}: ${head_nodockerfile} $VARIABLES_TEMPLATE" - exit 1 - fi - - # Contar scripts a procesar - local total_scripts=$(find "$BIN_HOME/$BIN_BASE" -name "*.sh" | wc -l) - local current=0 - - dialog_error_box "${head_info}" "${head_container} $total_scripts" - - # Recorrer todos los scripts .sh en el directorio bin - for script in "$BIN_HOME/$BIN_BASE"/*.sh; do - current=$((current + 1)) - - # Saltar el script actual para evitar problemas - if [ "$(basename "$script")" == "$(basename "$0")" ]; then - echo "[$current/$total_scripts] ${head_exit}: $(basename "$script")" - continue - fi - - echo "[$current/$total_scripts] ${head_info}: $(basename "$script")" - - # Hacer una copia de seguridad del script - cp "$script" "${script}.bak" - - # Extraer información del script - local script_info=$(extract_script_info "$script") - - # Aplicar la plantilla de encabezado - apply_template "$script" "$script_info" - - # Estandarizar variables y estructura común - standardize_variables "$script" - - echo " ✓ ${head_create}: $(basename "$script")" - done - - dialog_error_box "${head_info}" "${head_builded} $current ${head_container}.\n\n${head_version}.bak" -} - -# Ejecutar función principal -main \ No newline at end of file diff --git a/bin/update.sh b/bin/update.sh index 45b1b03..200ae5c 100755 --- a/bin/update.sh +++ b/bin/update.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# update.sh -# Modified: 2025/03/15 18:25:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. ] +# Script: update.sh +# Description: Script para update.sh +# Created: 2025/03/15 18:25:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,16 +21,25 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# CHECK SHELL LANGUAGE -BIN_LANG=${LANG:0:2} +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib #baselib_test load_bootstrap_msg() { @@ -59,7 +72,7 @@ else fi # Load bootstrap library for update functions -source $BIN_HOME/$BIN_LIBS/bootstrap.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/bootstrap.lib # Update sistema operativo y repositorios primero (no requiere privilegios de root) echo -e "\n${head_info}: Actualizando repositorios locales primero..." @@ -190,7 +203,7 @@ update_additional_tools() { local UPDATE_LANG=$4 # Cargar biblioteca bootstrap para acceder a las funciones de instalación - source "$BIN_PATH/$LIBRARY/bootstrap.lib" + source "$BIN_PATH/$BIN_BASE/$LIBRARY/bootstrap.lib" # Actualizar oathtool si está instalado command_installed oathtool @@ -211,7 +224,7 @@ update_additional_tools() { # Actualizar herramientas adicionales con sudo si están instaladas echo -e "\n${head_info}: Verificando herramientas adicionales..." -sudo bash -c "$(declare -f command_installed; declare -f update_additional_tools); update_additional_tools $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG" +sudo bash -c "$(declare -f command_installed; declare -f update_additional_tools); update_additional_tools $BIN_HOME/$BIN_BASE $BIN_LIBS $BIN_MESG $BIN_LANG" echo -e "\n${head_info}: Proceso de actualización completado." diff --git a/bin/vpn_install.sh b/bin/vpn_install.sh index b5899e5..ae9cee2 100755 --- a/bin/vpn_install.sh +++ b/bin/vpn_install.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# vpn_install.sh -# Modified: 2024/12/01 15:27:00 -# Derechos de Autor (C) [2024] [Mauro Rosero P. ] +# Script: vpn_install.sh +# Description: Script para vpn_install.sh +# Created: 2024/12/01 15:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,19 +21,34 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} -# LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib -#baselib_test +# Importar bibliotecas necesarias +source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" + +# Cargar mensajes en el idioma del sistema o español por defecto +load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" + +# Variables globales +title="${head_000} ${head_002}" function load_bootstrap_msg() { @@ -63,7 +82,7 @@ function install() { local UPDATE=$5 # Load base bash library - BIN_HOME=$BIN_PATH + BIN_HOME=$BIN_PATH source $BIN_PATH/$LIBRARY/base.lib # Load bootstrap bash library @@ -93,9 +112,6 @@ function install() { esac } -# Load messages -load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG - # Check for arguments option help=false version=false @@ -132,7 +148,8 @@ if $version; then fi # Display Headers -display_devstools_header "- $title" +display_devstools_header "PRITUNL VPN" # Run install with sudo -sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG $update" +BIN_USER=$(echo $BIN_HOME/$BIN_BASE) +sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_USER $BIN_LIBS $BIN_MESG $BIN_LANG $update" diff --git a/bin/vpn_users.sh b/bin/vpn_users.sh index 8d73f72..834a990 100755 --- a/bin/vpn_users.sh +++ b/bin/vpn_users.sh @@ -1,8 +1,12 @@ #!/bin/bash # -# vpn_users.sh -# Modified: 2024/12/01 15:27:00 -# Derechos de Autor (C) [2025] [Mauro Rosero P. (mauro.rosero@gmail.com)] +# Script: vpn_users.sh +# Description: Script para vpn_users.sh +# Created: 2024/12/01 15:27:00 +# Modified: 2025/03/19 11:57:08 +# [Author] Mauro Rosero P. +# +# 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 @@ -17,31 +21,42 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . -DEVSPATH=devs -BIN_HOME=$HOME/$DEVSPATH -BIN_MESG=bin/msg -BIN_LIBS=bin/lib -BIN_CFGS=bin/config -VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version") +# Configuración inicial +# Usar DEVELOPER_DIR de base.lib +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BIN_BASE="bin" +BIN_LIBS="lib" +BIN_MESG="msg" +BIN_CFGS="config" + +# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto +if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then + DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat") +else + DEVSPATH="devs" +fi + +BIN_HOME="$HOME/$DEVSPATH" +BIN_PATH=$BIN_HOME/$BIN_BASE +VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version") # CHECK SHELL LANGUAGE BIN_LANG=${LANG:0:2} # LOAD BASE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/base.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib #baselib_test - # LOAD CONSOLE BASH LIBRARY -source $BIN_HOME/$BIN_LIBS/console.lib +source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib #consolelib_test # Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" +load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "head" # Load head messages -load_messages $BIN_HOME $BIN_MESG $BIN_LANG "pritunl" +load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "pritunl" # Function to display help message function help() { @@ -61,7 +76,7 @@ function vpn_pritunl_users_form() { declare -a ARRAY c_val[0]=013 - read_file_to_array "${BIN_HOME}/${BIN_CFGS}/pritunl-orgs.dat" + read_file_to_array "${BIN_HOME}/${BIN_BASE}/${BIN_CFGS}/pritunl-orgs.dat" if [ $? -ne 0 ]; then ARRAY[0]="" c_val[0]=0 @@ -104,10 +119,10 @@ function vpn_pritunl_users_form() { display_devstools_header "${plmsg_000}" if [ "${action}" != "remove" ] then - ansible-playbook -i ${BIN_HOME}/inventory/base.ini ${BIN_HOME}/bin/ansible/pritunl_users.yaml \ + ansible-playbook -i ${BIN_HOME}/inventory/base.ini ${BIN_HOME}/${BIN_BASE}/${BIN_ANSIBLE}/pritunl_users.yaml \ -e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]} input_pritunl_email=${response[2]}" else - ansible-playbook -i $BIN_HOME/inventory/base.ini ${BIN_HOME}/bin/ansible/pritunl_users.yaml \ + ansible-playbook -i $BIN_HOME/inventory/base.ini ${BIN_HOME}/${BIN_BASE}/${BIN_ANSIBLE}/pritunl_users.yaml \ -e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]}" fi read -p "${head_pause}" diff --git a/sops/jarvis.sops.yaml b/sops/jarvis.sops.yaml new file mode 100644 index 0000000..9fe0036 --- /dev/null +++ b/sops/jarvis.sops.yaml @@ -0,0 +1,21 @@ +{ + "data": "ENC[AES256_GCM,data:0QDmEqXpOKs0v1ga5BGLKBMUfG3oonXdwJywtiZEuDzOflSFO9wteezYIz2na85Zlli5I+pYUpt96lg43ZqZ9ZiyCrpfrfuDqcVscVSr9iWc+rMAYjLVBUZI5+gH1PsUZFlG5o+ioKl+tYunFU9hKx7FbHRFIe1AGbweoDxy6mMjqwxHwdopoHoV+8zoSqK5XFo=,iv:HdXQhmFARl9mlAIxfHFjrKT6+wG0SZQ0yvVH9W9yruw=,tag:5wAk2e5wXi5ckDA25tK5kA==,type:str]", + "sops": { + "kms": null, + "gcp_kms": null, + "azure_kv": null, + "hc_vault": null, + "age": null, + "lastmodified": "2025-03-19T19:20:07Z", + "mac": "ENC[AES256_GCM,data:OdAbCBM749u+2jNyWCeqWEZjQhZPBbrFX5D+D00oFCMHdU1SFPE4+7+bcGdjS2sdzgU5VQJhj72RRK0RYToRBQDoW17lmXHhvShrXAfHmtCr27ikjDTRnecBFgGOrzk3LkADtNj33w0U7OeQjC5BzLBXlIJzRCjoAFigXIbvrUA=,iv:8mFrzFyUTx43Pk8ntw7MGc3y2MDgGLBz2lNQQe1J4IA=,tag:dmwrgkBntqtG9z0aNjnCOg==,type:str]", + "pgp": [ + { + "created_at": "2025-03-19T19:20:07Z", + "enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/ARAAwYo+n42glMyddN5Ci5aKAp6Eg8rJKSQnzFKAT9CBHCeV\n8p9uymDsEq/BBaUDr3s7uFHHSwMgJLYUfAFcAXC7nFInxQ1t1miUr45njIaKMTuX\nnr72Y6U2xwYlY0vzYC4hmBiedJyRbBV8AIveZLZdhugGq6bsrdJOHjyC67JwwmKX\nZwgmLaCS6qDxoIKnyFIoPWVz4FZCE4y6A27fkXpSjU70/8yZC9ghMN1IXFNsJx6C\nrsyS0tyIwZcz5MSWcSNczgpzC9+UJFGAvZwR2geyUi0xrZpuXD2NAmU2nklG+YsN\ntbdJErFmWvZZBi6Si6AxHaHZLDgGsZq6DltBSjN/ySuNVeZ7M3opi28bHKFwYC2J\n9AAUhNzQIDBA4MQrPLy1u3C6PB6AS6aZ9jnVm3IeWyQUZ0Pk5Xysvp9Re230gMTy\nfR4rESQ0RohBMpMptlYEAZR/PebPSMnH5wikvb84FIROhhcEbn29lOw/ssEHdj7D\nO0VdqDLoW6znHCiuB5NfIxV4x98c5e2/c0KYiZQqRFmGuSndB17M5S8knD8VSJ83\nUIrQtH+Mjp1Yifx4AvPa2TQrmaQNH7dcjtkd5Tqun8NoBYUPv8jTH36ti+lyt2gZ\nSwegV+bTaeMZhvOsc1k2MAtchv8nKno8NQberUIytZteoWJWZs+iBd1/VFBpF4zS\nXgHeYOAtI0FjkX4kVrANwtFcFe7E7/6HgXeUNn2seuapqWp1/1TuVjzv+KM5R+3a\nAk4pwoi0wQnjj0Jk1qE7kDUrQGAxP/gb117ACEewOh1BogMZWvw0YW5xa53iPz4=\n=+/ik\n-----END PGP MESSAGE-----", + "fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07" + } + ], + "unencrypted_suffix": "_unencrypted", + "version": "3.9.2" + } +} \ No newline at end of file