Compare commits
20 commits
7bb290ef20
...
f4568ef57d
Author | SHA1 | Date | |
---|---|---|---|
f4568ef57d | |||
f6f2ebcaa0 | |||
f415e54d34 | |||
1b4993ea4b | |||
31735062c2 | |||
e67b6fc5de | |||
d5b3b1bc31 | |||
64c32003fe | |||
d405113803 | |||
60a8a86ca2 | |||
7114c43475 | |||
d32832b091 | |||
c51bdfdf9f | |||
efb5aa5d2a | |||
d3bad69f02 | |||
78c5a03f17 | |||
57f59ddffe | |||
12495ab53e | |||
60d0d3337d | |||
074643e21d |
49 changed files with 1719 additions and 569 deletions
11
.gitignore
vendored
11
.gitignore
vendored
|
@ -12,26 +12,21 @@
|
||||||
!bin/config/
|
!bin/config/
|
||||||
!bin/ansible/
|
!bin/ansible/
|
||||||
!inventory/
|
!inventory/
|
||||||
!templates/
|
|
||||||
!sops/
|
!sops/
|
||||||
!proyectos/
|
!projects/
|
||||||
|
|
||||||
# Permitir el seguimiento de archivos específicos
|
# Permitir el seguimiento de archivos específicos
|
||||||
# !archivo1.txt
|
# !archivo1.txt
|
||||||
!README.md
|
!README.md
|
||||||
|
!CLUADE.md
|
||||||
!.gitignore
|
!.gitignore
|
||||||
|
|
||||||
# Ignorar archivos específicos
|
|
||||||
CLAUDE.md
|
|
||||||
bin/config/rates/
|
|
||||||
|
|
||||||
# Permitir archivos en carpetas específicas
|
# Permitir archivos en carpetas específicas
|
||||||
# !carpeta1/*.txt
|
# !carpeta1/*.txt
|
||||||
!bin/*
|
!bin/*
|
||||||
!bin/lib/*
|
!bin/lib/*
|
||||||
!bin/msg/*
|
!bin/msg/*
|
||||||
!bin/config/*
|
!bin/config/**
|
||||||
!bin/ansible/**
|
!bin/ansible/**
|
||||||
!inventory/**
|
!inventory/**
|
||||||
!templates/**
|
|
||||||
!sops/*.yaml
|
!sops/*.yaml
|
||||||
|
|
|
@ -18,13 +18,17 @@
|
||||||
|
|
||||||
## Development Practices
|
## Development Practices
|
||||||
- Use `bin/lib/base.lib` for common functions
|
- Use `bin/lib/base.lib` for common functions
|
||||||
|
- Use `bin/lib/developers.lib` for developers functions
|
||||||
|
- Use `bin/lib/clonsole.lib` for dialog functions
|
||||||
- Message files stored in `bin/msg/` (multilingual support)
|
- Message files stored in `bin/msg/` (multilingual support)
|
||||||
- Configuration in `bin/config/` directory
|
- Configuration in `bin/config/` directory
|
||||||
- Use git commit messages with prefixes: [ADDED], [IMPROVED], [FIXED], [SOPS]
|
- Use git commit messages with prefixes: [ADDED], [IMPROVED], [FIXED], [SOPS], [INIT]
|
||||||
- Prefer podman over docker for container management
|
- Prefer podman over docker for container management
|
||||||
- All shell scripts (.sh) and Python scripts (.py) must be placed in the `bin/` directory unless explicitly specified otherwise
|
- All shell scripts (.sh) and Python scripts (.py) must be placed in the `bin/` directory unless explicitly specified otherwise
|
||||||
|
|
||||||
## Authorship Policy
|
## Authorship Policy
|
||||||
|
- Use `bin/config/python.header` how example to python comment header
|
||||||
|
- Use `bin/config/bash.header` how example to bash comment header
|
||||||
- For new projects created by Claude Code, use author: "Cortana Rosero One <cortana@rosero.one>"
|
- For new projects created by Claude Code, use author: "Cortana Rosero One <cortana@rosero.one>"
|
||||||
- Include reference indicating generation by Claude Code and the version used
|
- Include reference indicating generation by Claude Code and the version used
|
||||||
- Example header comment:
|
- Example header comment:
|
||||||
|
|
|
@ -38,10 +38,8 @@ bin/update.sh
|
||||||
|
|
||||||
| Comando | Descripción |
|
| Comando | Descripción |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| `bin/bootstrap.sh` | Instala herramientas básicas y configura la gestión de contenedores |
|
| `bin/bootstrap.sh` | Instala herramientas básicas (incluyendo oathtool y zbar) y configura la gestión de contenedores |
|
||||||
| `bin/bootstrap.sh --oathtool` | Instala únicamente oathtool (herramienta para TOTP/HOTP) |
|
| `bin/update.sh` | Actualiza el entorno de desarrollo y herramientas (incluyendo oathtool y zbar) |
|
||||||
| `bin/bootstrap.sh --zbar` | Instala únicamente zbar (herramienta para lectura de códigos QR) |
|
|
||||||
| `bin/update.sh` | Actualiza el entorno de desarrollo con las últimas funcionalidades |
|
|
||||||
| `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva |
|
| `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva |
|
||||||
| `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado |
|
| `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado |
|
||||||
|
|
||||||
|
@ -76,6 +74,7 @@ bin/update.sh
|
||||||
|
|
||||||
| Comando | Descripción |
|
| Comando | Descripción |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
|
| `bin/qr_secret.sh` | Extrae secretos de imágenes QR y los guarda encriptados con SOPS |
|
||||||
| `bin/vpn_install.sh` | Instala el cliente Pritunl VPN |
|
| `bin/vpn_install.sh` | Instala el cliente Pritunl VPN |
|
||||||
| `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión |
|
| `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión |
|
||||||
| `bin/vpn_users.sh` | Gestiona usuarios de la VPN |
|
| `bin/vpn_users.sh` | Gestiona usuarios de la VPN |
|
||||||
|
|
115
bin/bootstrap.sh
115
bin/bootstrap.sh
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/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
|
# Modified: 2025/03/15 16:30:00
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>]
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_MESG=bin/msg
|
|
||||||
BIN_LIBS=bin/lib
|
# 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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
#baselib_test
|
|
||||||
|
# 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() {
|
load_bootstrap_msg() {
|
||||||
|
|
||||||
|
@ -48,7 +69,6 @@ install() {
|
||||||
local LIBRARY=$2
|
local LIBRARY=$2
|
||||||
local MESSAGES=$3
|
local MESSAGES=$3
|
||||||
local INSTALL_LANG=$4
|
local INSTALL_LANG=$4
|
||||||
local PACKAGE_ONLY=$5 # Paquete específico a instalar (opcional)
|
|
||||||
|
|
||||||
local PYTHON_PACKAGE=python3
|
local PYTHON_PACKAGE=python3
|
||||||
local GIT_PACKAGE=git
|
local GIT_PACKAGE=git
|
||||||
|
@ -75,32 +95,6 @@ install() {
|
||||||
# Load bootstrap messages
|
# Load bootstrap messages
|
||||||
load_bootstrap_msg $BIN_PATH $MESSAGES $INSTALL_LANG
|
load_bootstrap_msg $BIN_PATH $MESSAGES $INSTALL_LANG
|
||||||
|
|
||||||
# Si se especificó un paquete específico, instalar solo ese
|
|
||||||
if [ -n "$PACKAGE_ONLY" ]; then
|
|
||||||
case "$PACKAGE_ONLY" in
|
|
||||||
"oathtool")
|
|
||||||
# Instalar oathtool
|
|
||||||
command_installed $OATHTOOL_PACKAGE
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
oathtool_install
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
"zbar")
|
|
||||||
# Instalar zbar
|
|
||||||
command_installed $ZBAR_PACKAGE
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
zbar_install
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "Paquete '$PACKAGE_ONLY' no reconocido o no soportado."
|
|
||||||
return 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install wget from OS Packages
|
# Install wget from OS Packages
|
||||||
command_installed $WGET_PACKAGE
|
command_installed $WGET_PACKAGE
|
||||||
if [ $? -ne 0 ]
|
if [ $? -ne 0 ]
|
||||||
|
@ -189,40 +183,29 @@ install() {
|
||||||
echo "$domsg_005"
|
echo "$domsg_005"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Install oathtool if not already installed
|
||||||
|
command_installed oathtool
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "Instalando oathtool..."
|
||||||
|
oathtool_install
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install zbar if not already installed
|
||||||
|
command_installed zbar-tools
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
echo "Instalando zbar..."
|
||||||
|
zbar_install
|
||||||
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Load messages
|
# Load messages
|
||||||
load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG
|
load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG
|
||||||
|
|
||||||
# Procesar argumentos
|
# Display Headers
|
||||||
PACKAGE_TO_INSTALL=""
|
|
||||||
|
|
||||||
if [ $# -ge 1 ]; then
|
|
||||||
case "$1" in
|
|
||||||
"--oathtool")
|
|
||||||
PACKAGE_TO_INSTALL="oathtool"
|
|
||||||
display_devstools_header "- Instalación de oathtool"
|
|
||||||
;;
|
|
||||||
"--zbar")
|
|
||||||
PACKAGE_TO_INSTALL="zbar"
|
|
||||||
display_devstools_header "- Instalación de zbar"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
display_devstools_header "- $bomsg_000"
|
display_devstools_header "- $bomsg_000"
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
display_devstools_header "- $bomsg_000"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Run install with sudo
|
# 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 '$PACKAGE_TO_INSTALL'"
|
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
|
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# cortana_install.sh
|
# Script: claude_install.sh
|
||||||
# Modified: 2024/12/01 15:27:00
|
# Description: Script para instalar o desinstalar Anthropoc Claude Code con npm
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
|
# Created: 2024/12/01 15:27:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Script para instalar o desinstalar Anthropoc Claude Code con npm
|
||||||
# Uso:
|
# Uso:
|
||||||
# ./script.sh -> Instalación
|
# ./claude_install.sh -> Instalación
|
||||||
# ./script.sh -u -> Desinstalación
|
# ./claude_install -u -> Desinstalación
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
BIN_CFGS=bin/config
|
BIN_LIBS="lib"
|
||||||
VERSION=1.0.1
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
#baselib_test
|
|
||||||
|
|
||||||
# Load head messages
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
|
|
||||||
|
|
||||||
# Verificar que 'dialog' esté instalado
|
# Verificar que 'dialog' esté instalado
|
||||||
if ! command -v dialog &>/dev/null; then
|
if ! command -v dialog &>/dev/null; then
|
||||||
echo "${npm_001}"
|
echo "${npm_001}"
|
||||||
|
@ -50,10 +63,10 @@ fi
|
||||||
# Verificar que 'npm' esté instalado
|
# Verificar que 'npm' esté instalado
|
||||||
if ! command -v npm &>/dev/null; then
|
if ! command -v npm &>/dev/null; then
|
||||||
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_022}" 7 50
|
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_022}" 7 50
|
||||||
exit 1
|
${BIN_HOME}/${BIN_BASE}/npm_install.sh
|
||||||
fi
|
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() {
|
pre_anthropic() {
|
||||||
# First, save a list of your existing global packages for later migration
|
# First, save a list of your existing global packages for later migration
|
||||||
npm list -g --depth=0 > ~/npm-global-packages.txt
|
npm list -g --depth=0 > ~/npm-global-packages.txt
|
||||||
|
@ -95,7 +108,7 @@ pre_anthropic() {
|
||||||
|
|
||||||
# Función para instalar Anthropoc Claude Code
|
# Función para instalar Anthropoc Claude Code
|
||||||
install_anthropic() {
|
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
|
# Ejecutar la instalación
|
||||||
pre_anthropic
|
pre_anthropic
|
||||||
npm install -g @anthropic-ai/claude-code
|
npm install -g @anthropic-ai/claude-code
|
||||||
|
@ -109,7 +122,7 @@ install_anthropic() {
|
||||||
|
|
||||||
# Función para desinstalar Anthropoc Claude Code
|
# Función para desinstalar Anthropoc Claude Code
|
||||||
uninstall_anthropic() {
|
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
|
# Ejecutar la desinstalación
|
||||||
npm uninstall -g @anthropic-ai/claude-code
|
npm uninstall -g @anthropic-ai/claude-code
|
||||||
if [[ $? -eq 0 ]]; then
|
if [[ $? -eq 0 ]]; then
|
||||||
|
@ -127,6 +140,7 @@ if [[ "$1" == "-u" ]]; then
|
||||||
uninstall_anthropic
|
uninstall_anthropic
|
||||||
else
|
else
|
||||||
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
|
@ -135,7 +149,11 @@ else
|
||||||
install_anthropic
|
install_anthropic
|
||||||
else
|
else
|
||||||
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Limpiar consola
|
||||||
|
clear
|
||||||
|
|
23
bin/config/bash.head
Normal file
23
bin/config/bash.head
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Script: $SCRIPT_NAME
|
||||||
|
# Description: $DESCRIPTION
|
||||||
|
# Created: $CREATED_DATE
|
||||||
|
# Modified: $MODIFIED_DATE
|
||||||
|
# [Author] $AUTHOR
|
||||||
|
# [Generated] $GENERATED_BY
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
29
bin/config/bash.variables
Normal file
29
bin/config/bash.variables
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
# 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}"
|
|
@ -1 +1 @@
|
||||||
proyectos
|
projects
|
||||||
|
|
1
bin/config/rates/backend.rate
Normal file
1
bin/config/rates/backend.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
57.73
|
1
bin/config/rates/bash.rate
Normal file
1
bin/config/rates/bash.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
23.64
|
1
bin/config/rates/cloud.rate
Normal file
1
bin/config/rates/cloud.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
51.00
|
1
bin/config/rates/data.rate
Normal file
1
bin/config/rates/data.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
56.81
|
1
bin/config/rates/devops.rate
Normal file
1
bin/config/rates/devops.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
59.11
|
1
bin/config/rates/dotnet.rate
Normal file
1
bin/config/rates/dotnet.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
49.00
|
1
bin/config/rates/frontend.rate
Normal file
1
bin/config/rates/frontend.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
41.00
|
1
bin/config/rates/fullstack.rate
Normal file
1
bin/config/rates/fullstack.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
88.66
|
1
bin/config/rates/java.rate
Normal file
1
bin/config/rates/java.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
49.00
|
1
bin/config/rates/ml.rate
Normal file
1
bin/config/rates/ml.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
49.00
|
1
bin/config/rates/mobile.rate
Normal file
1
bin/config/rates/mobile.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
47.00
|
1
bin/config/rates/odoo.rate
Normal file
1
bin/config/rates/odoo.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
20.00
|
1
bin/config/rates/php.rate
Normal file
1
bin/config/rates/php.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
49.00
|
1
bin/config/rates/python.rate
Normal file
1
bin/config/rates/python.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
49.00
|
1
bin/config/rates/ruby.rate
Normal file
1
bin/config/rates/ruby.rate
Normal file
|
@ -0,0 +1 @@
|
||||||
|
31.00
|
|
@ -1,20 +1,4 @@
|
||||||
#!/bin/bash
|
#!/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
|
# Verificar si ~/.npm-global/bin está en el PATH
|
||||||
if [[ ":$PATH:" != *":$HOME/.npm-global/bin:"* ]]; then
|
if [[ ":$PATH:" != *":$HOME/.npm-global/bin:"* ]]; then
|
||||||
# Si no está en el PATH, usamos la ruta completa en el alias
|
# 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
|
# Si está en el PATH, podemos usar el nombre directamente
|
||||||
alias cortana="claude"
|
alias cortana="claude"
|
||||||
fi
|
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."
|
echo "Alias cortana activado en la sesión actual."
|
||||||
fi
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
#!/bin/bash
|
# Script: cortana_disable.sh
|
||||||
#
|
# Description: # Script para desactivar el alias 'cortana' para Claude Code
|
||||||
# cortana_disable.sh
|
# Created: 2025/03/19 11:57:08
|
||||||
# Modified: 2025/03/11 12:00:00
|
# Modified: 2025/03/11 12:00:00
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Script para desactivar el alias 'cortana' para Claude Code
|
||||||
# Uso:
|
# Uso:
|
||||||
# ./cortana_disable.sh
|
# ./cortana_disable.sh
|
||||||
|
# Nota: no usa console.lib, ni console.es
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
BIN_CFGS=bin/config
|
BIN_LIBS="lib"
|
||||||
VERSION=1.0.0
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
|
|
||||||
# Load head messages
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
|
|
||||||
# Verificar que 'dialog' esté instalado
|
# Verificar que 'dialog' esté instalado
|
||||||
|
@ -63,3 +77,6 @@ else
|
||||||
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Limpiar consola
|
||||||
|
clear
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
#!/bin/bash
|
# Script: cortana_enable.sh
|
||||||
#
|
# Description: # Script para activar el alias 'cortana' para Claude Code
|
||||||
# cortana_enable.sh
|
# Created: 2025/03/19 11:57:08
|
||||||
# Modified: 2025/03/11 12:00:00
|
# Modified: 2025/03/11 12:00:00
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# Script para activar el alias 'cortana' para Claude Code
|
# Script para desactivar el alias 'cortana' para Claude Code
|
||||||
# Uso:
|
# Uso:
|
||||||
# ./cortana_enable.sh
|
# ./cortana_enable.sh
|
||||||
|
# Nota: no usa console.lib, ni console.es
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
BIN_CFGS=bin/config
|
BIN_LIBS="lib"
|
||||||
VERSION=1.0.0
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
|
|
||||||
# Load head messages
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
|
|
||||||
# Verificar que 'dialog' esté instalado
|
# Verificar que 'dialog' esté instalado
|
||||||
if ! command -v dialog &>/dev/null; then
|
if ! command -v dialog &>/dev/null; then
|
||||||
echo "${npm_001}"
|
echo "${npm_001}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
dialog --backtitle "${title}" --title "${npm_036}" --msgbox "${npm_037}\n\n${npm_047}\n\nsource $ALIAS_FILE\n\n" 10 70
|
||||||
else
|
else
|
||||||
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Limpiar consola
|
||||||
|
clear
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# cortana_token.sh
|
# Script: cortana_token.sh
|
||||||
# Modified: 2025-03-12 20:26:07
|
# Description: Script para encriptar el token de Claude Code usando SOPS
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
|
# Created: 2025/03/12 20:26:07
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# 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
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
BIN_CFGS=bin/config
|
BIN_LIBS="lib"
|
||||||
VERSION=1.0.0
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
|
|
||||||
# Load head messages
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
|
|
||||||
check_dependencies() {
|
check_dependencies() {
|
||||||
|
@ -149,6 +165,7 @@ main() {
|
||||||
dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} ${HOME}/.cortana/cortana.sops.yaml" 7 70
|
dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} ${HOME}/.cortana/cortana.sops.yaml" 7 70
|
||||||
else
|
else
|
||||||
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50
|
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
3
bin/cortana_unalias.sh
Executable file
3
bin/cortana_unalias.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
unalias cortana 2>/dev/null
|
||||||
|
echo "Alias cortana desactivado en la sesión actual."
|
|
@ -1,12 +1,13 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Script: cversadm_token.sh
|
# Script: cversion_token.sh
|
||||||
# Description: Administrador de tokens para plataformas de control de versiones
|
# Description: Administrador de tokens para plataformas de control de versiones
|
||||||
# Modified: 2025/03/15
|
# Created: 2025/03/15 10:07:08
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
# [Author] Cortana Rosero One <cortana@rosero.one>
|
# [Author] Cortana Rosero One <cortana@rosero.one>
|
||||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
#
|
#
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>]
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
@ -24,36 +25,33 @@
|
||||||
# Configuración inicial
|
# Configuración inicial
|
||||||
# Usar DEVELOPER_DIR de base.lib
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
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
|
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
||||||
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
||||||
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
|
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
|
||||||
else
|
else
|
||||||
DEVSPATH="devs"
|
DEVSPATH="devs"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
BIN_HOME="$HOME/$DEVSPATH"
|
BIN_HOME="$HOME/$DEVSPATH"
|
||||||
BIN_BASE="bin"
|
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
|
||||||
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
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"
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.lib"
|
||||||
|
|
||||||
# Cargar mensajes en el idioma del sistema o español por defecto
|
# 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}" "head"
|
||||||
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "console"
|
||||||
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||||
|
|
||||||
# Variables globales
|
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
apps_title="${cvmsg_000}"
|
apps_title="${cvmsg_000}"
|
||||||
|
|
||||||
|
@ -79,13 +77,7 @@ ensure_developers_dir() {
|
||||||
# Función para seleccionar la plataforma de control de versiones usando menu_actions
|
# Función para seleccionar la plataforma de control de versiones usando menu_actions
|
||||||
select_platform() {
|
select_platform() {
|
||||||
# Preparar opciones para menu_actions
|
# Preparar opciones para menu_actions
|
||||||
local menu_options="1:${cvmsg_010}
|
local menu_options="1:${cvmsg_010}\n2:${cvmsg_011}\n3:${cvmsg_012}"
|
||||||
2:${cvmsg_011}
|
|
||||||
3:${cvmsg_012}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"
|
|
||||||
|
|
||||||
# Usar menu_actions en lugar de dialog_input_menu
|
# Usar menu_actions en lugar de dialog_input_menu
|
||||||
local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9)
|
local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9)
|
||||||
|
@ -118,33 +110,35 @@ request_token() {
|
||||||
"forgejo") platform_name="${cvmsg_012}" ;;
|
"forgejo") platform_name="${cvmsg_012}" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Bucle para validación de token usando dialog directamente
|
# Bucle para validación de token usando funciones de console.lib
|
||||||
while true; do
|
while true; do
|
||||||
# Usar dialog directamente en lugar de dialog_input_pass
|
# Usar dialog_input_pass de console.lib
|
||||||
token=$(dialog --backtitle "$title" --stdout --title "${cvmsg_003}" \
|
dialog_input_pass "${cvmsg_004} $platform_name" "${cvmsg_005}"
|
||||||
--passwordbox "${cvmsg_004} $platform_name\n${cvmsg_005}" 8 60)
|
|
||||||
|
|
||||||
# Verificar si el usuario canceló
|
# Verificar si el usuario canceló
|
||||||
if [ $? -ne 0 ]; then
|
if [ $codex -ne 0 ]; then
|
||||||
clear
|
clear
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Obtener token de la variable value establecida por dialog_input_pass
|
||||||
|
token="$value"
|
||||||
|
|
||||||
# Validar token
|
# Validar token
|
||||||
if [ -z "$token" ]; then
|
if [ -z "$token" ]; then
|
||||||
dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_015}" 7 60
|
dialog_error_box "${head_error}" "${cvmsg_015}"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar longitud (debería tener al menos 30 caracteres)
|
# Verificar longitud (debería tener al menos 30 caracteres)
|
||||||
if [ ${#token} -lt 30 ]; then
|
if [ ${#token} -lt 30 ]; then
|
||||||
dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_016}" 7 60
|
dialog_error_box "${head_error}" "${cvmsg_016}"
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar formato (debería contener caracteres alfanuméricos y algunos especiales)
|
# Verificar formato (debería contener caracteres alfanuméricos y algunos especiales)
|
||||||
if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then
|
if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then
|
||||||
dialog --backtitle "$title" --title "${head_warning}" --msgbox "${cvmsg_017}" 7 60
|
dialog_error_box "${head_warning}" "${cvmsg_017}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Token válido
|
# Token válido
|
||||||
|
@ -198,15 +192,6 @@ main() {
|
||||||
check_sops_installed
|
check_sops_installed
|
||||||
ensure_developers_dir
|
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
|
# Seleccionar plataforma
|
||||||
platform=$(select_platform)
|
platform=$(select_platform)
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
|
@ -231,7 +216,7 @@ main() {
|
||||||
"forgejo") platform_name="${cvmsg_012}" ;;
|
"forgejo") platform_name="${cvmsg_012}" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
dialog_error_box "${cvmsg_009}" "${cvmsg_006} $platform_name"
|
dialog_error_box "${head_info}" "${cvmsg_006} $platform_name"
|
||||||
else
|
else
|
||||||
local platform_name=""
|
local platform_name=""
|
||||||
case $platform in
|
case $platform in
|
138
bin/fjadmin_install.sh
Executable file
138
bin/fjadmin_install.sh
Executable file
|
@ -0,0 +1,138 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Script: fjadmin_install.sh
|
||||||
|
# Description: Script para instalar Forgejo Manager CLI.
|
||||||
|
# Created: 2025/03/19 11:57:08
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Cortana Rosero One <cortana@rosero.one>
|
||||||
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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}
|
||||||
|
|
||||||
|
# Importar bibliotecas necesarias
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.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"
|
||||||
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||||
|
title="${head_000} ${head_002}"
|
||||||
|
apps_title="${fjmsg_000}"
|
||||||
|
|
||||||
|
|
||||||
|
# Verificar si dialog está instalado
|
||||||
|
check_dialog_installed() {
|
||||||
|
if ! command -v dialog &> /dev/null; then
|
||||||
|
echo "${head_001}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para verificar si cargo está instalado
|
||||||
|
check_cargo() {
|
||||||
|
if ! command -v cargo &> /dev/null; then
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_002}"
|
||||||
|
|
||||||
|
# Mostrar progreso de instalación
|
||||||
|
echo "curl https://sh.rustup.rs -sSf | sh"
|
||||||
|
curl https://sh.rustup.rs -sSf | sh
|
||||||
|
|
||||||
|
# Cargar el entorno de Rust
|
||||||
|
source "$HOME/.cargo/env"
|
||||||
|
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_003}"
|
||||||
|
else
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_004}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para verificar si forgejo-cli está instalado
|
||||||
|
check_forgejo_cli() {
|
||||||
|
if ! command -v codeberg &> /dev/null; then
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_005}"
|
||||||
|
|
||||||
|
# Verificar que cargo esté disponible
|
||||||
|
if ! command -v cargo &> /dev/null; then
|
||||||
|
dialog_error_box "${head_error}" "${fjmsg_006}\n${fjmsg_007}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Instalar forgejo-cli (codeberg-cli)
|
||||||
|
echo "cargo install codeberg-cli"
|
||||||
|
cargo install codeberg-cli
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_008}"
|
||||||
|
else
|
||||||
|
dialog_error_box "${head_error}" "${fjmsg_009}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_008}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función principal
|
||||||
|
main() {
|
||||||
|
# Verificar si dialog está instalado
|
||||||
|
check_dialog_installed
|
||||||
|
|
||||||
|
# Preguntar al usuario si desea instalar Forgejo CLI
|
||||||
|
dialog_yesno "${fjmsg_012}\n\n${fjmsg_013}"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_canceled}" "${fjmsg_014}"
|
||||||
|
clear
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar si cargo está instalado
|
||||||
|
check_cargo
|
||||||
|
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_010}"
|
||||||
|
|
||||||
|
# Instalar forgejo-cli si no está instalado
|
||||||
|
check_forgejo_cli
|
||||||
|
|
||||||
|
dialog_error_box "${head_info}" "${fjmsg_011}"
|
||||||
|
|
||||||
|
clear
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ejecutar función principal
|
||||||
|
main
|
|
@ -1,59 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# [Author] Cortana Rosero One <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
|
|
|
@ -1,12 +1,13 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# Script: fj_login.sh
|
# Script: forgejo_login.sh
|
||||||
# Description: Script para autenticación con Forgejo usando tokens encriptados
|
# Description: Script para autenticación con Forgejo usando tokens encriptados
|
||||||
# Modified: 2025/03/15
|
# Created: 2025/03/19 11:57:08
|
||||||
|
# Modified: 2025/03/19 15:47:08
|
||||||
# [Author] Cortana Rosero One <cortana@rosero.one>
|
# [Author] Cortana Rosero One <cortana@rosero.one>
|
||||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
#
|
#
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>]
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
@ -23,36 +24,39 @@
|
||||||
|
|
||||||
# Configuración inicial
|
# Configuración inicial
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
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_BASE="bin"
|
||||||
BIN_LIBS="lib"
|
BIN_LIBS="lib"
|
||||||
BIN_MESG="msg"
|
BIN_MESG="msg"
|
||||||
|
BIN_CFGS="config"
|
||||||
|
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
|
||||||
|
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
|
||||||
|
|
||||||
# CHECK SHELL LANGUAGE
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# Importar bibliotecas necesarias
|
# Importar bibliotecas necesarias
|
||||||
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
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
|
# 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}" "head"
|
||||||
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||||
|
|
||||||
# Variables globales
|
# Variables globales
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${fgmsg_000}"
|
||||||
|
|
||||||
# Función para verificar si berg está instalado
|
# Función para verificar si berg está instalado
|
||||||
check_berg_installed() {
|
check_berg_installed() {
|
||||||
if ! command -v berg &> /dev/null; then
|
if ! command -v berg &> /dev/null; then
|
||||||
echo "Error: berg (Forgejo CLI) no está instalado. Por favor, ejecute bin/fjcli_install.sh primero."
|
echo "${fgmsg_001} ${fgmsg_002}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -60,7 +64,7 @@ check_berg_installed() {
|
||||||
# Función para verificar si SOPS está instalado
|
# Función para verificar si SOPS está instalado
|
||||||
check_sops_installed() {
|
check_sops_installed() {
|
||||||
if ! command -v sops &> /dev/null; then
|
if ! command -v sops &> /dev/null; then
|
||||||
echo "Error: SOPS no está instalado. Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias."
|
echo "${fgmsg_003} ${fgmsg_004}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -114,8 +118,8 @@ get_forgejo_url() {
|
||||||
login() {
|
login() {
|
||||||
# Verificar que el archivo de token encriptado existe
|
# Verificar que el archivo de token encriptado existe
|
||||||
if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then
|
if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then
|
||||||
echo "Error: No se encontró el archivo de token para Forgejo."
|
echo "${fgmsg_005}"
|
||||||
echo "Por favor, ejecute bin/cversadm_token.sh para configurar el token primero."
|
echo "${fgmsg_006}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -126,22 +130,22 @@ login() {
|
||||||
local forgejo_url=$(get_forgejo_url)
|
local forgejo_url=$(get_forgejo_url)
|
||||||
|
|
||||||
if [ -n "$forgejo_url" ]; then
|
if [ -n "$forgejo_url" ]; then
|
||||||
echo "Usando servidor Forgejo: $forgejo_url"
|
echo "${fgmsg_007} $forgejo_url"
|
||||||
export BERG_BASE_URL="$forgejo_url"
|
export BERG_BASE_URL="$forgejo_url"
|
||||||
else
|
else
|
||||||
echo "ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo."
|
echo "${fgmsg_008}"
|
||||||
echo "Si la autenticación falla, establezca manualmente BERG_BASE_URL."
|
echo "${fgmsg_009}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Iniciar sesión con berg
|
# Iniciar sesión con berg
|
||||||
echo "Iniciando sesión en Forgejo..."
|
echo "${fgmsg_010}"
|
||||||
berg auth login -t "$token"
|
berg auth login -t "$token"
|
||||||
local login_status=$?
|
local login_status=$?
|
||||||
|
|
||||||
if [ $login_status -eq 0 ]; then
|
if [ $login_status -eq 0 ]; then
|
||||||
echo "Sesión iniciada correctamente en Forgejo."
|
echo "${fgmsg_011}"
|
||||||
else
|
else
|
||||||
echo "Error al iniciar sesión en Forgejo. Por favor, verifique su token."
|
echo "${fgmsg_012}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -152,18 +156,18 @@ logout() {
|
||||||
local forgejo_url=$(get_forgejo_url)
|
local forgejo_url=$(get_forgejo_url)
|
||||||
|
|
||||||
if [ -n "$forgejo_url" ]; then
|
if [ -n "$forgejo_url" ]; then
|
||||||
echo "Usando servidor Forgejo: $forgejo_url"
|
echo "${fgmsg_007} $forgejo_url"
|
||||||
export BERG_BASE_URL="$forgejo_url"
|
export BERG_BASE_URL="$forgejo_url"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ya no se eliminan alias
|
# Ya no se eliminan alias
|
||||||
|
|
||||||
echo "Cerrando sesión de Forgejo..."
|
echo "${fgmsg_013}"
|
||||||
if ! berg auth status &>/dev/null; then
|
if ! berg auth status &>/dev/null; then
|
||||||
echo "No hay sesión activa en Forgejo."
|
echo "${fgmsg_014}"
|
||||||
else
|
else
|
||||||
berg auth logout -s 2>/dev/null || true
|
berg auth logout -s 2>/dev/null || true
|
||||||
echo "Sesión cerrada."
|
echo "${fgmsg_015}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +1,77 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ------------------------------------------------------------------
|
#
|
||||||
|
# Script: ghadmin_install.sh
|
||||||
|
# Description: Script para instalar github manager CLI
|
||||||
|
# Created: 2025/03/19 11:57:08
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
# [Author] Cortana Rosero One <cortana@rosero.one>
|
# [Author] Cortana Rosero One <cortana@rosero.one>
|
||||||
# [Title] ghcli_install.sh - Instalador de GitHub CLI
|
|
||||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
#
|
#
|
||||||
# AGPL License
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
# Modified date: 14/03/2025
|
#
|
||||||
# ------------------------------------------------------------------
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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}
|
||||||
|
|
||||||
|
# Importar bibliotecas necesarias
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.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"
|
||||||
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||||
|
title="${head_000} ${head_002}"
|
||||||
|
apps_title="${ghmsg_000}"
|
||||||
|
|
||||||
# Función para verificar si se está ejecutando como root
|
# Función para verificar si se está ejecutando como root
|
||||||
check_root() {
|
check_root() {
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
echo "Este script requiere privilegios de administrador."
|
echo "${ghmsg_001}"
|
||||||
echo "Intentando escalar privilegios..."
|
echo "${ghmsg_002}"
|
||||||
|
|
||||||
# Verificar si sudo está disponible
|
# Verificar si sudo está disponible
|
||||||
if command -v sudo &> /dev/null; then
|
if command -v sudo &> /dev/null; then
|
||||||
echo "Usando sudo para escalar privilegios..."
|
echo "${ghmsg_003}"
|
||||||
sudo "$0" "$@"
|
sudo "$0" "$@"
|
||||||
exit $?
|
exit $?
|
||||||
elif command -v doas &> /dev/null; then
|
elif command -v doas &> /dev/null; then
|
||||||
echo "Usando doas para escalar privilegios..."
|
echo "${ghmsg_004}"
|
||||||
doas "$0" "$@"
|
doas "$0" "$@"
|
||||||
exit $?
|
exit $?
|
||||||
else
|
else
|
||||||
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
|
echo "${ghmsg_005}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -46,12 +93,12 @@ detect_distro() {
|
||||||
DISTRO=$(uname -s)
|
DISTRO=$(uname -s)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Distribución detectada: $DISTRO"
|
echo "${ghmsg_006} $DISTRO"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar GitHub CLI en sistemas basados en Debian/Ubuntu
|
# Función para instalar GitHub CLI en sistemas basados en Debian/Ubuntu
|
||||||
install_gh_debian() {
|
install_gh_debian() {
|
||||||
echo "Instalando GitHub CLI en sistema basado en Debian/Ubuntu..."
|
echo "${ghmsg_007}"
|
||||||
|
|
||||||
# Añadir repositorio de GitHub CLI
|
# Añadir repositorio de GitHub CLI
|
||||||
type -p curl >/dev/null || apt update && apt install curl -y
|
type -p curl >/dev/null || apt update && apt install curl -y
|
||||||
|
@ -62,16 +109,17 @@ install_gh_debian() {
|
||||||
&& apt install gh -y
|
&& apt install gh -y
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitHub CLI instalado correctamente."
|
echo "${ghmsg_008}"
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitHub CLI."
|
echo "${ghmsg_009}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar GitHub CLI en sistemas basados en Red Hat/Fedora
|
# Función para instalar GitHub CLI en sistemas basados en Red Hat/Fedora
|
||||||
install_gh_redhat() {
|
install_gh_redhat() {
|
||||||
echo "Instalando GitHub CLI en sistema basado en Red Hat/Fedora..."
|
echo "${ghmsg_010}"
|
||||||
|
|
||||||
# Añadir repositorio de GitHub CLI
|
# Añadir repositorio de GitHub CLI
|
||||||
dnf install -y dnf-plugins-core
|
dnf install -y dnf-plugins-core
|
||||||
|
@ -79,51 +127,54 @@ install_gh_redhat() {
|
||||||
dnf install -y gh
|
dnf install -y gh
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitHub CLI instalado correctamente."
|
echo "${ghmsg_008}"
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitHub CLI."
|
echo "${ghmsg_009}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar GitHub CLI en Arch Linux
|
# Función para instalar GitHub CLI en Arch Linux
|
||||||
install_gh_arch() {
|
install_gh_arch() {
|
||||||
echo "Instalando GitHub CLI en Arch Linux..."
|
echo "${ghmsg_011}"
|
||||||
|
|
||||||
# Instalar GitHub CLI desde los repositorios oficiales
|
# Instalar GitHub CLI desde los repositorios oficiales
|
||||||
pacman -Sy --noconfirm gh
|
pacman -Sy --noconfirm gh
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitHub CLI instalado correctamente."
|
echo "${ghmsg_008}"
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitHub CLI."
|
echo "${ghmsg_009}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar GitHub CLI en sistemas basados en SUSE
|
# Función para instalar GitHub CLI en sistemas basados en SUSE
|
||||||
install_gh_suse() {
|
install_gh_suse() {
|
||||||
echo "Instalando GitHub CLI en sistema basado en SUSE..."
|
echo "${ghmsg_012}"
|
||||||
|
|
||||||
# Añadir repositorio de GitHub CLI
|
# Añadir repositorio de GitHub CLI
|
||||||
zypper addrepo --refresh https://cli.github.com/packages/rpm/gh-cli.repo
|
zypper addrepo --refresh https://cli.github.com/packages/rpm/gh-cli.repo
|
||||||
zypper install -y gh
|
zypper install -y gh
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitHub CLI instalado correctamente."
|
echo "${ghmsg_008}"
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitHub CLI."
|
echo "${ghmsg_009}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar GitHub CLI en macOS
|
# Función para instalar GitHub CLI en macOS
|
||||||
install_gh_macos() {
|
install_gh_macos() {
|
||||||
echo "Instalando GitHub CLI en macOS..."
|
echo "${ghmsg_013}"
|
||||||
|
|
||||||
# Verificar si Homebrew está instalado
|
# Verificar si Homebrew está instalado
|
||||||
if ! command -v brew &> /dev/null; then
|
if ! command -v brew &> /dev/null; then
|
||||||
echo "Homebrew no está instalado. Instalando Homebrew..."
|
echo "${ghmsg_014}"
|
||||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -131,9 +182,10 @@ install_gh_macos() {
|
||||||
brew install gh
|
brew install gh
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitHub CLI instalado correctamente."
|
echo "${ghmsg_008}"
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitHub CLI."
|
echo "${ghmsg_009}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -141,12 +193,14 @@ install_gh_macos() {
|
||||||
# Función para verificar si gh está instalado
|
# Función para verificar si gh está instalado
|
||||||
check_gh() {
|
check_gh() {
|
||||||
if command -v gh &> /dev/null; then
|
if command -v gh &> /dev/null; then
|
||||||
echo "GitHub CLI ya está instalado."
|
# Mostrar versión actual
|
||||||
echo "Versión actual:"
|
local current_version=$(gh --version | head -n 1)
|
||||||
gh --version
|
|
||||||
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL
|
# Preguntar si se desea reinstalar o actualizar usando dialog
|
||||||
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then
|
dialog_yesno "${ghmsg_015}\n${ghmsg_016}\n${current_version}\n\n${ghmsg_017}"
|
||||||
echo "Operación cancelada."
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_info}" "${ghmsg_018}"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -154,6 +208,12 @@ check_gh() {
|
||||||
|
|
||||||
# Función principal
|
# Función principal
|
||||||
main() {
|
main() {
|
||||||
|
# Verificar que 'dialog' esté instalado
|
||||||
|
if ! command -v dialog &>/dev/null; then
|
||||||
|
echo "${head_001}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Verificar si ya está instalado
|
# Verificar si ya está instalado
|
||||||
check_gh
|
check_gh
|
||||||
|
|
||||||
|
@ -183,30 +243,25 @@ main() {
|
||||||
install_gh_macos
|
install_gh_macos
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Distribución no soportada: $DISTRO"
|
dialog_error_box "${head_error}" "${ghmsg_019} $DISTRO\n\n${ghmsg_020}"
|
||||||
echo "Por favor, visite https://github.com/cli/cli#installation para instrucciones de instalación manual."
|
|
||||||
exit 1
|
exit 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Verificar la instalación
|
# Verificar la instalación
|
||||||
if command -v gh &> /dev/null; then
|
if command -v gh &> /dev/null; then
|
||||||
echo "GitHub CLI instalado correctamente."
|
local current_version=$(gh --version | head -n 1)
|
||||||
gh --version
|
|
||||||
|
|
||||||
# Sugerir autenticación
|
# Mostrar mensaje de éxito y sugerir autenticación usando dialog
|
||||||
echo ""
|
dialog_error_box "${head_success}" "${ghmsg_008}\n\n${current_version}\n\n${ghmsg_021}\ngh auth login\n\n${ghmsg_022}"
|
||||||
echo "Para autenticarse con GitHub, ejecute:"
|
|
||||||
echo "gh auth login"
|
|
||||||
echo ""
|
|
||||||
echo "Para más información, visite: https://cli.github.com/manual/"
|
|
||||||
else
|
else
|
||||||
echo "ERROR: La instalación de GitHub CLI falló."
|
dialog_error_box "${head_error}" "${ghmsg_023}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
}
|
}
|
||||||
|
|
||||||
# Ejecutar función principal
|
# Ejecutar función principal
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|
||||||
exit 0
|
exit 0
|
|
@ -1,30 +1,76 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# ------------------------------------------------------------------
|
#
|
||||||
|
# Script: gladmin_install.sh
|
||||||
|
# Description: Script para instalar Gitlab Manager CLI.
|
||||||
|
# Created: 2025/03/19 11:57:08
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
# [Author] Cortana Rosero One <cortana@rosero.one>
|
# [Author] Cortana Rosero One <cortana@rosero.one>
|
||||||
# [Title] glcli_install.sh - Instalador de GitLab CLI
|
|
||||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
#
|
#
|
||||||
# AGPL License
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
# Modified date: 14/03/2025
|
#
|
||||||
# ------------------------------------------------------------------
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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}
|
||||||
|
|
||||||
|
# Importar bibliotecas necesarias
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.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"
|
||||||
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||||
|
title="${head_000} ${head_002}"
|
||||||
|
apps_title="${glmsg_000}"
|
||||||
|
|
||||||
# Función para verificar si se está ejecutando como root
|
# Función para verificar si se está ejecutando como root
|
||||||
check_root() {
|
check_root() {
|
||||||
if [ "$(id -u)" -ne 0 ]; then
|
if [ "$(id -u)" -ne 0 ]; then
|
||||||
echo "Este script requiere privilegios de administrador."
|
echo "${glmsg_001}"
|
||||||
echo "Intentando escalar privilegios..."
|
echo "${glmsg_002}"
|
||||||
|
|
||||||
# Verificar si sudo está disponible
|
# Verificar si sudo está disponible
|
||||||
if command -v sudo &> /dev/null; then
|
if command -v sudo &> /dev/null; then
|
||||||
echo "Usando sudo para escalar privilegios..."
|
echo "${glmsg_003}"
|
||||||
sudo "$0" "$@"
|
sudo "$0" "$@"
|
||||||
exit $?
|
exit $?
|
||||||
elif command -v doas &> /dev/null; then
|
elif command -v doas &> /dev/null; then
|
||||||
echo "Usando doas para escalar privilegios..."
|
echo "${glmsg_004}"
|
||||||
doas "$0" "$@"
|
doas "$0" "$@"
|
||||||
exit $?
|
exit $?
|
||||||
else
|
else
|
||||||
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
|
echo "${glmsg_005}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -46,21 +92,21 @@ detect_distro() {
|
||||||
DISTRO=$(uname -s)
|
DISTRO=$(uname -s)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Distribución detectada: $DISTRO"
|
echo "${glmsg_006} $DISTRO"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar glab mediante Homebrew en macOS y Linux
|
# Función para instalar glab mediante Homebrew en macOS y Linux
|
||||||
install_glab_homebrew() {
|
install_glab_homebrew() {
|
||||||
echo "Instalando GitLab CLI mediante Homebrew..."
|
echo "${glmsg_007}"
|
||||||
|
|
||||||
# Verificar si Homebrew está instalado
|
# Verificar si Homebrew está instalado
|
||||||
if ! command -v brew &> /dev/null; then
|
if ! command -v brew &> /dev/null; then
|
||||||
echo "Homebrew no está instalado. Instalando Homebrew..."
|
echo "${glmsg_008}"
|
||||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
|
|
||||||
# Verificar si la instalación fue exitosa
|
# Verificar si la instalación fue exitosa
|
||||||
if ! command -v brew &> /dev/null; then
|
if ! command -v brew &> /dev/null; then
|
||||||
echo "ERROR: No se pudo instalar Homebrew."
|
echo "${glmsg_009}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -69,17 +115,17 @@ install_glab_homebrew() {
|
||||||
brew install gitlab-glab/tap/glab
|
brew install gitlab-glab/tap/glab
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante Homebrew."
|
echo "${glmsg_010}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitLab CLI mediante Homebrew."
|
echo "${glmsg_011}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar glab en sistemas basados en Debian/Ubuntu
|
# Función para instalar glab en sistemas basados en Debian/Ubuntu
|
||||||
install_glab_debian() {
|
install_glab_debian() {
|
||||||
echo "Instalando GitLab CLI en sistema basado en Debian/Ubuntu..."
|
echo "${glmsg_012}"
|
||||||
|
|
||||||
# Verificar si curl está instalado
|
# Verificar si curl está instalado
|
||||||
if ! command -v curl &> /dev/null; then
|
if ! command -v curl &> /dev/null; then
|
||||||
|
@ -88,13 +134,13 @@ install_glab_debian() {
|
||||||
|
|
||||||
# Intentar primero usando los paquetes del sistema si están disponibles
|
# Intentar primero usando los paquetes del sistema si están disponibles
|
||||||
if command -v apt &> /dev/null; then
|
if command -v apt &> /dev/null; then
|
||||||
echo "Verificando si glab está disponible en los repositorios..."
|
echo "${glmsg_013}"
|
||||||
apt-cache search --names-only "^glab$" 2>/dev/null | grep -q "^glab"
|
apt-cache search --names-only "^glab$" 2>/dev/null | grep -q "^glab"
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI encontrado en los repositorios. Instalando..."
|
echo "${glmsg_014}"
|
||||||
apt update && apt install -y glab
|
apt update && apt install -y glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
|
echo "${glmsg_015}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -102,81 +148,81 @@ install_glab_debian() {
|
||||||
|
|
||||||
# Si no está en los repositorios, usar el script oficial
|
# Si no está en los repositorios, usar el script oficial
|
||||||
if command -v gpg &> /dev/null; then
|
if command -v gpg &> /dev/null; then
|
||||||
echo "Agregando repositorio oficial de GitLab..."
|
echo "${glmsg_016}"
|
||||||
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante script oficial."
|
echo "${glmsg_017}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si el método anterior falla, probar con Homebrew
|
# Si el método anterior falla, probar con Homebrew
|
||||||
echo "Intentando instalar mediante Homebrew..."
|
echo "${glmsg_018}"
|
||||||
install_glab_homebrew
|
install_glab_homebrew
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar glab en sistemas basados en Red Hat/Fedora
|
# Función para instalar glab en sistemas basados en Red Hat/Fedora
|
||||||
install_glab_redhat() {
|
install_glab_redhat() {
|
||||||
echo "Instalando GitLab CLI en sistema basado en Red Hat/Fedora..."
|
echo "${glmsg_019}"
|
||||||
|
|
||||||
# Verificar si dnf está instalado
|
# Verificar si dnf está instalado
|
||||||
if command -v dnf &> /dev/null; then
|
if command -v dnf &> /dev/null; then
|
||||||
# Verificar si glab está disponible en los repositorios
|
# Verificar si glab está disponible en los repositorios
|
||||||
echo "Verificando si glab está disponible en los repositorios..."
|
echo "${glmsg_013}"
|
||||||
dnf list glab &>/dev/null
|
dnf list glab &>/dev/null
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI encontrado en los repositorios. Instalando..."
|
echo "${glmsg_014}"
|
||||||
dnf install -y glab
|
dnf install -y glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
|
echo "${glmsg_015}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si no está en los repositorios, usar el script oficial
|
# Si no está en los repositorios, usar el script oficial
|
||||||
if command -v gpg &> /dev/null; then
|
if command -v gpg &> /dev/null; then
|
||||||
echo "Usando script oficial de instalación..."
|
echo "${glmsg_020}"
|
||||||
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante script oficial."
|
echo "${glmsg_017}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si el método anterior falla, probar con snap
|
# Si el método anterior falla, probar con snap
|
||||||
if command -v snap &> /dev/null; then
|
if command -v snap &> /dev/null; then
|
||||||
echo "Intentando instalar mediante snap..."
|
echo "${glmsg_021}"
|
||||||
snap install glab
|
snap install glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante snap."
|
echo "${glmsg_022}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# Si dnf no está disponible, pero yum sí
|
# Si dnf no está disponible, pero yum sí
|
||||||
elif command -v yum &> /dev/null; then
|
elif command -v yum &> /dev/null; then
|
||||||
# Verificar si glab está disponible en los repositorios
|
# Verificar si glab está disponible en los repositorios
|
||||||
echo "Verificando si glab está disponible en los repositorios..."
|
echo "${glmsg_013}"
|
||||||
yum list glab &>/dev/null
|
yum list glab &>/dev/null
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI encontrado en los repositorios. Instalando..."
|
echo "${glmsg_014}"
|
||||||
yum install -y glab
|
yum install -y glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
|
echo "${glmsg_015}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si los métodos anteriores fallan, probar con Homebrew
|
# Si los métodos anteriores fallan, probar con Homebrew
|
||||||
echo "Intentando instalar mediante Homebrew..."
|
echo "${glmsg_018}"
|
||||||
install_glab_homebrew
|
install_glab_homebrew
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar glab en Arch Linux
|
# Función para instalar glab en Arch Linux
|
||||||
install_glab_arch() {
|
install_glab_arch() {
|
||||||
echo "Instalando GitLab CLI en Arch Linux..."
|
echo "${glmsg_023}"
|
||||||
|
|
||||||
# Intentar primero usando el repositorio oficial
|
# Intentar primero usando el repositorio oficial
|
||||||
if command -v pacman &> /dev/null; then
|
if command -v pacman &> /dev/null; then
|
||||||
|
@ -184,7 +230,7 @@ install_glab_arch() {
|
||||||
if pacman -Ss glab | grep -q "^community/glab"; then
|
if pacman -Ss glab | grep -q "^community/glab"; then
|
||||||
pacman -Sy --noconfirm glab
|
pacman -Sy --noconfirm glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
|
echo "${glmsg_015}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -193,55 +239,55 @@ install_glab_arch() {
|
||||||
if command -v yay &> /dev/null; then
|
if command -v yay &> /dev/null; then
|
||||||
yay -S --noconfirm glab
|
yay -S --noconfirm glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente desde AUR."
|
echo "${glmsg_024}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si los métodos anteriores fallan, probar con Homebrew
|
# Si los métodos anteriores fallan, probar con Homebrew
|
||||||
echo "Intentando instalar mediante Homebrew..."
|
echo "${glmsg_018}"
|
||||||
install_glab_homebrew
|
install_glab_homebrew
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar glab en sistemas basados en SUSE
|
# Función para instalar glab en sistemas basados en SUSE
|
||||||
install_glab_suse() {
|
install_glab_suse() {
|
||||||
echo "Instalando GitLab CLI en sistema basado en SUSE..."
|
echo "${glmsg_025}"
|
||||||
|
|
||||||
# Intentar primero usando el script oficial
|
# Intentar primero usando el script oficial
|
||||||
if command -v gpg &> /dev/null; then
|
if command -v gpg &> /dev/null; then
|
||||||
echo "Usando script oficial de instalación..."
|
echo "${glmsg_020}"
|
||||||
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante script oficial."
|
echo "${glmsg_017}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si el método anterior falla, probar con snap
|
# Si el método anterior falla, probar con snap
|
||||||
if command -v snap &> /dev/null; then
|
if command -v snap &> /dev/null; then
|
||||||
echo "Intentando instalar mediante snap..."
|
echo "${glmsg_021}"
|
||||||
snap install glab
|
snap install glab
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante snap."
|
echo "${glmsg_022}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Si los métodos anteriores fallan, probar con Homebrew
|
# Si los métodos anteriores fallan, probar con Homebrew
|
||||||
echo "Intentando instalar mediante Homebrew..."
|
echo "${glmsg_018}"
|
||||||
install_glab_homebrew
|
install_glab_homebrew
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar directamente usando Go
|
# Función para instalar directamente usando Go
|
||||||
install_glab_go() {
|
install_glab_go() {
|
||||||
echo "Intentando instalar GitLab CLI mediante Go..."
|
echo "${glmsg_026}"
|
||||||
|
|
||||||
# Verificar si Go está instalado
|
# Verificar si Go está instalado
|
||||||
if ! command -v go &> /dev/null; then
|
if ! command -v go &> /dev/null; then
|
||||||
echo "Go no está instalado. Se requiere Go para este método de instalación."
|
echo "${glmsg_027}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -249,20 +295,20 @@ install_glab_go() {
|
||||||
go install gitlab.com/gitlab-org/cli/cmd/glab@main
|
go install gitlab.com/gitlab-org/cli/cmd/glab@main
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "GitLab CLI instalado correctamente mediante Go."
|
echo "${glmsg_028}"
|
||||||
echo "Asegúrese de que \$GOPATH/bin esté en su PATH."
|
echo "${glmsg_029}"
|
||||||
echo "Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:"
|
echo "${glmsg_030}"
|
||||||
echo "export PATH=\$PATH:\$HOME/go/bin"
|
echo "${glmsg_031}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitLab CLI mediante Go."
|
echo "${glmsg_032}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Función para instalar usando método binario genérico
|
# Función para instalar usando método binario genérico
|
||||||
install_glab_binary() {
|
install_glab_binary() {
|
||||||
echo "Instalando GitLab CLI usando binarios precompilados..."
|
echo "${glmsg_033}"
|
||||||
|
|
||||||
# Crear directorio temporal
|
# Crear directorio temporal
|
||||||
TMP_DIR=$(mktemp -d)
|
TMP_DIR=$(mktemp -d)
|
||||||
|
@ -278,7 +324,7 @@ install_glab_binary() {
|
||||||
ARCH="arm64"
|
ARCH="arm64"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Arquitectura no soportada: $ARCH"
|
echo "${glmsg_034} $ARCH"
|
||||||
return 1
|
return 1
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -295,12 +341,12 @@ install_glab_binary() {
|
||||||
# Construir URL de descarga
|
# Construir URL de descarga
|
||||||
DOWNLOAD_URL="https://github.com/profclems/glab/releases/download/${LATEST_VERSION}/glab_${LATEST_VERSION:1}_${OS}_${ARCH}.tar.gz"
|
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"
|
echo "${glmsg_035} $DOWNLOAD_URL"
|
||||||
|
|
||||||
# Descargar y extraer
|
# Descargar y extraer
|
||||||
curl -L "$DOWNLOAD_URL" -o glab.tar.gz
|
curl -L "$DOWNLOAD_URL" -o glab.tar.gz
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "ERROR: No se pudo descargar GitLab CLI."
|
echo "${glmsg_036}"
|
||||||
cd - > /dev/null
|
cd - > /dev/null
|
||||||
rm -rf "$TMP_DIR"
|
rm -rf "$TMP_DIR"
|
||||||
return 1
|
return 1
|
||||||
|
@ -308,7 +354,7 @@ install_glab_binary() {
|
||||||
|
|
||||||
tar xzf glab.tar.gz
|
tar xzf glab.tar.gz
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "ERROR: No se pudo extraer el archivo de GitLab CLI."
|
echo "${glmsg_037}"
|
||||||
cd - > /dev/null
|
cd - > /dev/null
|
||||||
rm -rf "$TMP_DIR"
|
rm -rf "$TMP_DIR"
|
||||||
return 1
|
return 1
|
||||||
|
@ -324,10 +370,10 @@ install_glab_binary() {
|
||||||
|
|
||||||
# Verificar instalación
|
# Verificar instalación
|
||||||
if command -v glab &> /dev/null; then
|
if command -v glab &> /dev/null; then
|
||||||
echo "GitLab CLI instalado correctamente mediante binarios precompilados."
|
echo "${glmsg_038}"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
echo "ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados."
|
echo "${glmsg_039}"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -335,12 +381,14 @@ install_glab_binary() {
|
||||||
# Función para verificar si glab está instalado
|
# Función para verificar si glab está instalado
|
||||||
check_glab() {
|
check_glab() {
|
||||||
if command -v glab &> /dev/null; then
|
if command -v glab &> /dev/null; then
|
||||||
echo "GitLab CLI ya está instalado."
|
# Mostrar versión actual
|
||||||
echo "Versión actual:"
|
local current_version=$(glab --version | head -n 1)
|
||||||
glab --version
|
|
||||||
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL
|
# Preguntar si se desea reinstalar o actualizar usando dialog
|
||||||
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then
|
dialog_yesno "${glmsg_040}\n${glmsg_041}\n${current_version}\n\n${glmsg_042}"
|
||||||
echo "Operación cancelada."
|
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_info}" "${glmsg_043}"
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -348,6 +396,12 @@ check_glab() {
|
||||||
|
|
||||||
# Función principal
|
# Función principal
|
||||||
main() {
|
main() {
|
||||||
|
# Verificar que 'dialog' esté instalado
|
||||||
|
if ! command -v dialog &>/dev/null; then
|
||||||
|
echo "${head_001}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# Verificar si ya está instalado
|
# Verificar si ya está instalado
|
||||||
check_glab
|
check_glab
|
||||||
|
|
||||||
|
@ -394,14 +448,13 @@ main() {
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Distribución no soportada directamente: $DISTRO"
|
dialog_error_box "${head_warning}" "${glmsg_044} $DISTRO\n${glmsg_045}"
|
||||||
echo "Intentando métodos alternativos..."
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos
|
# Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos
|
||||||
if [ "$install_success" = false ]; then
|
if [ "$install_success" = false ]; then
|
||||||
echo "Intentando métodos alternativos de instalación..."
|
dialog_error_box "${head_info}" "${glmsg_046}"
|
||||||
|
|
||||||
# Intentar instalar con Go
|
# Intentar instalar con Go
|
||||||
if command -v go &> /dev/null; then
|
if command -v go &> /dev/null; then
|
||||||
|
@ -421,25 +474,19 @@ main() {
|
||||||
|
|
||||||
# Si todos los métodos fallan
|
# Si todos los métodos fallan
|
||||||
if [ "$install_success" = false ]; then
|
if [ "$install_success" = false ]; then
|
||||||
echo "No se pudo instalar GitLab CLI con ninguno de los métodos disponibles."
|
dialog_error_box "${head_error}" "${glmsg_047}\n\n${glmsg_048}"
|
||||||
echo "Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual."
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar la instalación
|
# Verificar la instalación
|
||||||
if command -v glab &> /dev/null; then
|
if command -v glab &> /dev/null; then
|
||||||
echo "GitLab CLI instalado correctamente."
|
local current_version=$(glab --version | head -n 1)
|
||||||
glab --version
|
|
||||||
|
|
||||||
# Sugerir autenticación
|
# Mostrar mensaje de éxito y sugerir autenticación usando dialog
|
||||||
echo ""
|
dialog_error_box "${head_success}" "${glmsg_049}\n\n${current_version}\n\n${glmsg_050}\nglab auth login\n\n${glmsg_051}"
|
||||||
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
|
else
|
||||||
echo "ERROR: La instalación de GitLab CLI falló."
|
dialog_error_box "${head_error}" "${glmsg_052}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
@ -447,4 +494,7 @@ main() {
|
||||||
# Ejecutar función principal
|
# Ejecutar función principal
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|
||||||
|
# Limpiar la pantalla al finalizar
|
||||||
|
clear
|
||||||
|
|
||||||
exit 0
|
exit 0
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# gpg_init.sh
|
# Script: gpg_init.sh
|
||||||
# Modified: 2024/12/09 10:27:00
|
# Description: Script de inicialización de estructura para firma GPG
|
||||||
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
# Created: 2024/12/09 10:27:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
@ -43,8 +60,6 @@ load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
||||||
# Load gpg messages
|
# Load gpg messages
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg"
|
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
########### MAIN PROGRAM ###########
|
########### MAIN PROGRAM ###########
|
||||||
|
|
||||||
# Set program title
|
# Set program title
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# helix_install.sh
|
# Script: helix_install.sh
|
||||||
# Modified: 2025/03/11 15:00:00
|
# Description: Script para instalar Helix Editor
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
|
# Created: 2025/03/11 15:00:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
@ -21,22 +25,32 @@
|
||||||
# Uso:
|
# Uso:
|
||||||
# ./helix_install.sh
|
# ./helix_install.sh
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_MESG=bin/msg
|
BIN_BASE="bin"
|
||||||
BIN_LIBS=bin/lib
|
BIN_LIBS="lib"
|
||||||
BIN_CFGS=bin/config
|
BIN_MESG="msg"
|
||||||
VERSION=1.0.0
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
source $BIN_HOME/$BIN_LIBS/console.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
|
||||||
|
|
||||||
# Load head messages
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
apps_title="${hx_001}"
|
apps_title="${hx_001}"
|
||||||
|
|
||||||
|
@ -221,6 +235,10 @@ install_helix_tarball() {
|
||||||
if [ "$EUID" -ne 0 ]; then
|
if [ "$EUID" -ne 0 ]; then
|
||||||
dialog_error_box "${head_superuser}" "${hx_011}"
|
dialog_error_box "${head_superuser}" "${hx_011}"
|
||||||
dialog_input_pass "${npm_002}" "" ""
|
dialog_input_pass "${npm_002}" "" ""
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_error}" "${npm_003}"
|
||||||
|
finish
|
||||||
|
fi
|
||||||
SUDO_PASS="$value"
|
SUDO_PASS="$value"
|
||||||
|
|
||||||
# Verificar que la contraseña funcione
|
# Verificar que la contraseña funcione
|
||||||
|
|
170
bin/jarvis_token.sh
Executable file
170
bin/jarvis_token.sh
Executable file
|
@ -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. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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
|
|
@ -34,7 +34,7 @@ DEVELOPER_DIR=${HOME}/.developer
|
||||||
DATENOW="$(date +"%Y-%m-%d %H:%M:%S")"
|
DATENOW="$(date +"%Y-%m-%d %H:%M:%S")"
|
||||||
DATEBAK="$(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
|
FREEKV_SOPS_FILE=freekv-sops.devs.yaml
|
||||||
|
|
||||||
DOCKER_LOCAL=dockerfile.local
|
DOCKER_LOCAL=dockerfile.local
|
||||||
|
@ -44,8 +44,6 @@ DOCKER_BUILD=build
|
||||||
DOCKER_FILE=Dockerfile
|
DOCKER_FILE=Dockerfile
|
||||||
DOCKER_ENTRY=entrypoint.sh
|
DOCKER_ENTRY=entrypoint.sh
|
||||||
|
|
||||||
VERSION="$(cat < ${BIN_HOME}/${BIN_CONF}/version)"
|
|
||||||
|
|
||||||
# Verificar si el script se está ejecutando como usuario root (superusuario)
|
# Verificar si el script se está ejecutando como usuario root (superusuario)
|
||||||
function is_root() {
|
function is_root() {
|
||||||
if [ "$(id -u)" -eq 0 ]; then
|
if [ "$(id -u)" -eq 0 ]; then
|
||||||
|
|
|
@ -60,3 +60,136 @@ cvmsg_015="El token no puede estar vacío. Por favor ingrese un token válido."
|
||||||
cvmsg_016="El token parece ser demasiado corto. Verifique que haya copiado el token completo."
|
cvmsg_016="El token parece ser demasiado corto. Verifique que haya copiado el token completo."
|
||||||
cvmsg_017="El token contiene caracteres no estándar. Verifique que sea correcto."
|
cvmsg_017="El token contiene caracteres no estándar. Verifique que sea correcto."
|
||||||
|
|
||||||
|
# Mensajes para qr_secret.sh
|
||||||
|
qrmsg_000="EXTRACTOR DE SECRETOS QR"
|
||||||
|
qrmsg_001="Nombre del archivo"
|
||||||
|
qrmsg_002="Ingrese un nombre para el archivo (solo letras, números, ., - y _)"
|
||||||
|
qrmsg_003="Seleccione una imagen QR"
|
||||||
|
qrmsg_004="El nombre no puede estar vacío."
|
||||||
|
qrmsg_005="El nombre no puede contener espacios."
|
||||||
|
qrmsg_006="El nombre solo puede contener letras, números, ., - y _."
|
||||||
|
qrmsg_007="No se pudo extraer el secreto de la imagen QR seleccionada."
|
||||||
|
qrmsg_008="Secreto guardado correctamente en"
|
||||||
|
qrmsg_009="No se pudo guardar el secreto encriptado."
|
||||||
|
qrmsg_010="Operación cancelada por el usuario."
|
||||||
|
qrmsg_011="Éxito"
|
||||||
|
qrmsg_012="Error"
|
||||||
|
qrmsg_013="Dialog no está instalado"
|
||||||
|
qrmsg_014="Zbar no está instalado"
|
||||||
|
|
||||||
|
# Mensajes para fjadmin_install.sh
|
||||||
|
fjmsg_000="INSTALADOR DE FORGEJO CLI"
|
||||||
|
fjmsg_001="Instalando Forgejo CLI"
|
||||||
|
fjmsg_002="Cargo no está instalado. Instalando Rust y Cargo..."
|
||||||
|
fjmsg_003="Rust y Cargo han sido instalados correctamente."
|
||||||
|
fjmsg_004="Cargo ya está instalado."
|
||||||
|
fjmsg_005="Forgejo CLI no está instalado. Instalando..."
|
||||||
|
fjmsg_006="ERROR: No se pudo encontrar cargo en el PATH después de la instalación."
|
||||||
|
fjmsg_007="Por favor reinicie su terminal e intente nuevamente."
|
||||||
|
fjmsg_008="Forgejo CLI instalado correctamente."
|
||||||
|
fjmsg_009="ERROR: No se pudo instalar Forgejo CLI."
|
||||||
|
fjmsg_010="Preparando instalación de Forgejo CLI..."
|
||||||
|
fjmsg_011="Instalación completada."
|
||||||
|
fjmsg_012="¿Desea instalar Forgejo CLI?"
|
||||||
|
fjmsg_013="Esta herramienta le permite administrar instancias de Forgejo desde línea de comandos."
|
||||||
|
fjmsg_014="Instalación cancelada por el usuario."
|
||||||
|
|
||||||
|
# Mensajes para forgejo_login.sh
|
||||||
|
fgmsg_000="INICIO DE SESIÓN EN FORGEJO"
|
||||||
|
fgmsg_001="Error: berg (Forgejo CLI) no está instalado."
|
||||||
|
fgmsg_002="Por favor, ejecute ${BIN_HOME}/${BIN_BASE}/fjadmin_install.sh primero."
|
||||||
|
fgmsg_003="Error: SOPS no está instalado."
|
||||||
|
fgmsg_004="Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias."
|
||||||
|
fgmsg_005="Error: No se encontró el archivo de token para Forgejo."
|
||||||
|
fgmsg_006="Por favor, ejecute bin/cversadm_token.sh para configurar el token primero."
|
||||||
|
fgmsg_007="Usando servidor Forgejo:"
|
||||||
|
fgmsg_008="ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo."
|
||||||
|
fgmsg_009="Si la autenticación falla, establezca manualmente BERG_BASE_URL."
|
||||||
|
fgmsg_010="Iniciando sesión en Forgejo..."
|
||||||
|
fgmsg_011="Sesión iniciada correctamente en Forgejo."
|
||||||
|
fgmsg_012="Error al iniciar sesión en Forgejo. Por favor, verifique su token."
|
||||||
|
fgmsg_013="Cerrando sesión de Forgejo..."
|
||||||
|
fgmsg_014="No hay sesión activa en Forgejo."
|
||||||
|
fgmsg_015="Sesión cerrada."
|
||||||
|
|
||||||
|
# Mensajes para ghadmin_install.sh
|
||||||
|
ghmsg_000="INSTALADOR DE GITHUB CLI"
|
||||||
|
ghmsg_001="Este script requiere privilegios de administrador."
|
||||||
|
ghmsg_002="Intentando escalar privilegios..."
|
||||||
|
ghmsg_003="Usando sudo para escalar privilegios..."
|
||||||
|
ghmsg_004="Usando doas para escalar privilegios..."
|
||||||
|
ghmsg_005="ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
|
||||||
|
ghmsg_006="Distribución detectada:"
|
||||||
|
ghmsg_007="Instalando GitHub CLI en sistema basado en Debian/Ubuntu..."
|
||||||
|
ghmsg_008="GitHub CLI instalado correctamente."
|
||||||
|
ghmsg_009="ERROR: No se pudo instalar GitHub CLI."
|
||||||
|
ghmsg_010="Instalando GitHub CLI en sistema basado en Red Hat/Fedora..."
|
||||||
|
ghmsg_011="Instalando GitHub CLI en Arch Linux..."
|
||||||
|
ghmsg_012="Instalando GitHub CLI en sistema basado en SUSE..."
|
||||||
|
ghmsg_013="Instalando GitHub CLI en macOS..."
|
||||||
|
ghmsg_014="Homebrew no está instalado. Instalando Homebrew..."
|
||||||
|
ghmsg_015="GitHub CLI ya está instalado."
|
||||||
|
ghmsg_016="Versión actual:"
|
||||||
|
ghmsg_017="¿Desea reinstalar o actualizar? (s/n):"
|
||||||
|
ghmsg_018="Operación cancelada."
|
||||||
|
ghmsg_019="Distribución no soportada:"
|
||||||
|
ghmsg_020="Por favor, visite https://github.com/cli/cli#installation para instrucciones de instalación manual."
|
||||||
|
ghmsg_021="Para autenticarse con GitHub, ejecute:"
|
||||||
|
ghmsg_022="Para más información, visite: https://cli.github.com/manual/"
|
||||||
|
ghmsg_023="ERROR: La instalación de GitHub CLI falló."
|
||||||
|
|
||||||
|
# Mensajes para gladmin_install.sh
|
||||||
|
glmsg_000="INSTALADOR DE GITLAB CLI"
|
||||||
|
glmsg_001="Este script requiere privilegios de administrador."
|
||||||
|
glmsg_002="Intentando escalar privilegios..."
|
||||||
|
glmsg_003="Usando sudo para escalar privilegios..."
|
||||||
|
glmsg_004="Usando doas para escalar privilegios..."
|
||||||
|
glmsg_005="ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
|
||||||
|
glmsg_006="Distribución detectada:"
|
||||||
|
glmsg_007="Instalando GitLab CLI mediante Homebrew..."
|
||||||
|
glmsg_008="Homebrew no está instalado. Instalando Homebrew..."
|
||||||
|
glmsg_009="ERROR: No se pudo instalar Homebrew."
|
||||||
|
glmsg_010="GitLab CLI instalado correctamente mediante Homebrew."
|
||||||
|
glmsg_011="ERROR: No se pudo instalar GitLab CLI mediante Homebrew."
|
||||||
|
glmsg_012="Instalando GitLab CLI en sistema basado en Debian/Ubuntu..."
|
||||||
|
glmsg_013="Verificando si glab está disponible en los repositorios..."
|
||||||
|
glmsg_014="GitLab CLI encontrado en los repositorios. Instalando..."
|
||||||
|
glmsg_015="GitLab CLI instalado correctamente desde los repositorios oficiales."
|
||||||
|
glmsg_016="Agregando repositorio oficial de GitLab..."
|
||||||
|
glmsg_017="GitLab CLI instalado correctamente mediante script oficial."
|
||||||
|
glmsg_018="Intentando instalar mediante Homebrew..."
|
||||||
|
glmsg_019="Instalando GitLab CLI en sistema basado en Red Hat/Fedora..."
|
||||||
|
glmsg_020="Usando script oficial de instalación..."
|
||||||
|
glmsg_021="Intentando instalar mediante snap..."
|
||||||
|
glmsg_022="GitLab CLI instalado correctamente mediante snap."
|
||||||
|
glmsg_023="Instalando GitLab CLI en Arch Linux..."
|
||||||
|
glmsg_024="GitLab CLI instalado correctamente desde AUR."
|
||||||
|
glmsg_025="Instalando GitLab CLI en sistema basado en SUSE..."
|
||||||
|
glmsg_026="Intentando instalar GitLab CLI mediante Go..."
|
||||||
|
glmsg_027="Go no está instalado. Se requiere Go para este método de instalación."
|
||||||
|
glmsg_028="GitLab CLI instalado correctamente mediante Go."
|
||||||
|
glmsg_029="Asegúrese de que $GOPATH/bin esté en su PATH."
|
||||||
|
glmsg_030="Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:"
|
||||||
|
glmsg_031="export PATH=$PATH:$HOME/go/bin"
|
||||||
|
glmsg_032="ERROR: No se pudo instalar GitLab CLI mediante Go."
|
||||||
|
glmsg_033="Instalando GitLab CLI usando binarios precompilados..."
|
||||||
|
glmsg_034="Arquitectura no soportada:"
|
||||||
|
glmsg_035="Descargando GitLab CLI desde:"
|
||||||
|
glmsg_036="ERROR: No se pudo descargar GitLab CLI."
|
||||||
|
glmsg_037="ERROR: No se pudo extraer el archivo de GitLab CLI."
|
||||||
|
glmsg_038="GitLab CLI instalado correctamente mediante binarios precompilados."
|
||||||
|
glmsg_039="ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados."
|
||||||
|
glmsg_040="GitLab CLI ya está instalado."
|
||||||
|
glmsg_041="Versión actual:"
|
||||||
|
glmsg_042="¿Desea reinstalar o actualizar? (s/n):"
|
||||||
|
glmsg_043="Operación cancelada."
|
||||||
|
glmsg_044="Distribución no soportada directamente:"
|
||||||
|
glmsg_045="Intentando métodos alternativos..."
|
||||||
|
glmsg_046="Intentando métodos alternativos de instalación..."
|
||||||
|
glmsg_047="No se pudo instalar GitLab CLI con ninguno de los métodos disponibles."
|
||||||
|
glmsg_048="Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual."
|
||||||
|
glmsg_049="GitLab CLI instalado correctamente."
|
||||||
|
glmsg_050="Para autenticarse con GitLab, ejecute:"
|
||||||
|
glmsg_051="Para más información, visite: https://gitlab.com/gitlab-org/cli/blob/main/docs/index.md"
|
||||||
|
glmsg_052="ERROR: La instalación de GitLab CLI falló."
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ head_installing="Instalando"
|
||||||
head_info="INFO"
|
head_info="INFO"
|
||||||
head_warning="ADVERTENCIA"
|
head_warning="ADVERTENCIA"
|
||||||
head_error="ERROR"
|
head_error="ERROR"
|
||||||
|
head_success="ÉXITO"
|
||||||
head_unknow="UNKNOW"
|
head_unknow="UNKNOW"
|
||||||
head_version="Versión"
|
head_version="Versión"
|
||||||
head_ubuntu="ubuntu"
|
head_ubuntu="ubuntu"
|
||||||
|
@ -84,7 +85,9 @@ git_end_commited="Todos los cambios al repositorio nuevo han sido aplicados!"
|
||||||
git_new_project_pushed="Proyecto ha sido creado/actualizado en repositorio remoto"
|
git_new_project_pushed="Proyecto ha sido creado/actualizado en repositorio remoto"
|
||||||
|
|
||||||
npm_000="Cortana"
|
npm_000="Cortana"
|
||||||
|
npm_000_0="Jarvis"
|
||||||
npm_000_1="Rosero One"
|
npm_000_1="Rosero One"
|
||||||
|
npm_000_2="Alias"
|
||||||
npm_001="El programa 'dialog' no está instalado. Por favor, instálalo e inténtalo nuevamente."
|
npm_001="El programa 'dialog' no está instalado. Por favor, instálalo e inténtalo nuevamente."
|
||||||
npm_002="No eres super usuario. Ingresa la contraseña para escalamiento:"
|
npm_002="No eres super usuario. Ingresa la contraseña para escalamiento:"
|
||||||
npm_003="Contraseña incorrecta o error al escalar privilegios."
|
npm_003="Contraseña incorrecta o error al escalar privilegios."
|
||||||
|
@ -103,22 +106,22 @@ npm_014="Instalación completada."
|
||||||
npm_015="Instalación completada. Versiones instaladas: Node.js: [versión] npm: [versión]"
|
npm_015="Instalación completada. Versiones instaladas: Node.js: [versión] npm: [versión]"
|
||||||
npm_016="Instalador de Node.js y npm"
|
npm_016="Instalador de Node.js y npm"
|
||||||
npm_017="Confirmar Sistema"
|
npm_017="Confirmar Sistema"
|
||||||
npm_018="Instalación"
|
npm_018="Instalación de Anthropic Claude Code"
|
||||||
npm_019="Versiones instaladas:"
|
npm_019="Versiones instaladas:"
|
||||||
npm_020="No encontrado"
|
npm_020="No encontrado"
|
||||||
npm_021="Instalación Finalizada"
|
npm_021="Instalación Finalizada"
|
||||||
npm_022="npm no está instalado. Por favor instálalo e inténtalo de nuevo."
|
npm_022="npm no está instalado. Por favor instálalo e inténtalo de nuevo."
|
||||||
npm_023="Se procederá a instalar Anthropoc Claude Code usando npm."
|
npm_023="Se procederá a instalar Anthropic Claude Code usando npm."
|
||||||
npm_024="Instalación completada satisfactoriamente."
|
npm_024="Instalación completada satisfactoriamente."
|
||||||
npm_025="Ocurrió un error durante la instalación."
|
npm_025="Ocurrió un error durante la instalación."
|
||||||
npm_026="Desinstalar"
|
npm_026="Desinstalar"
|
||||||
npm_027="Se procederá a desinstalar Anthropoc Claude Code usando npm."
|
npm_027="Se procederá a desinstalar Anthropic Claude Code usando npm."
|
||||||
npm_028="Desinstalación Completa"
|
npm_028="Desinstalación Completa"
|
||||||
npm_029="Desinstalación completada exitosamente."
|
npm_029="Desinstalación completada exitosamente."
|
||||||
npm_030="Ocurrió un error durante la desinstalación."
|
npm_030="Ocurrió un error durante la desinstalación."
|
||||||
npm_031="Confirmación"
|
npm_031="Confirmación"
|
||||||
npm_032="¿Está seguro que desea desinstalar Anthropoc Claude Code?"
|
npm_032="¿Está seguro que desea desinstalar Anthropic Claude Code?"
|
||||||
npm_033="¿Desea instalar Anthropoc Claude Code?"
|
npm_033="¿Desea instalar Anthropic Claude Code?"
|
||||||
npm_034="Alias existente"
|
npm_034="Alias existente"
|
||||||
npm_035="El alias 'cortana' ya existe en"
|
npm_035="El alias 'cortana' ya existe en"
|
||||||
npm_036="Alias creado"
|
npm_036="Alias creado"
|
||||||
|
@ -146,6 +149,7 @@ npm_057="El token contiene caracteres no estándar. Verifique que sea correcto."
|
||||||
npm_058="El token de Cortana ha sido encriptado exitosamente en"
|
npm_058="El token de Cortana ha sido encriptado exitosamente en"
|
||||||
npm_059="Falló la encriptación del token de Cortana."
|
npm_059="Falló la encriptación del token de Cortana."
|
||||||
npm_060="Configuración de PATH actualizada. Para aplicar cambios permanentes, reinicie su terminal después de la instalación o ejecute:"
|
npm_060="Configuración de PATH actualizada. Para aplicar cambios permanentes, reinicie su terminal después de la instalación o ejecute:"
|
||||||
|
|
||||||
hx_001="Instalador de Helix Editor"
|
hx_001="Instalador de Helix Editor"
|
||||||
hx_002="Este script instalará Helix Editor. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)."
|
hx_002="Este script instalará Helix Editor. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)."
|
||||||
hx_003="Descargando la última versión de Helix..."
|
hx_003="Descargando la última versión de Helix..."
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# npm_install.sh
|
#
|
||||||
# Script interactivo para instalar Node.js y npm en múltiples sistemas operativos
|
# Script: npm_install.sh
|
||||||
# Soporta: Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)
|
# Description: # Script interactivo para instalar Node.js y npm en múltiples sistemas operativos
|
||||||
# Requiere: dialog
|
# Created: 2025/03/09 10:27:00
|
||||||
# Modified: 2025/03/09 10:27:00
|
# Modified: 2025/03/19 11:57:08
|
||||||
# Generado con inteligencia artificial
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
@ -20,22 +21,32 @@
|
||||||
# Debería haber recibido una copia de la Licencia Pública Affero General
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
BIN_CFGS=bin/config
|
BIN_LIBS="lib"
|
||||||
VERSION=1.0.1
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
#baselib_test
|
|
||||||
|
|
||||||
# Load head messages
|
# Cargar mensajes en el idioma del sistema o español por defecto
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
|
|
||||||
# Función para limpiar la pantalla y salir
|
# Función para limpiar la pantalla y salir
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# profile_backup.sh
|
# Script: profile_backup.sh
|
||||||
# Modified: 2024/12/09 10:27:00
|
# Description: Script para hacer copia de seguridad del perfil del desarrollador
|
||||||
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
# Created: 2024/12/09 10:27:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# LOAD BASE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
|
||||||
#baselib_test
|
#baselib_test
|
||||||
|
|
||||||
# LOAD CONSOLE BASH LIBRARY
|
# LOAD CONSOLE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/console.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
|
||||||
#consolelib_test
|
#consolelib_test
|
||||||
|
|
||||||
# LOAD SQLITE3 BASH LIBRARY
|
# LOAD SQLITE3 BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/sqlite.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib
|
||||||
#sqlitelib_test
|
#sqlitelib_test
|
||||||
|
|
||||||
# LOAD DEVELOPERS BASH LIBRARY
|
# LOAD DEVELOPERS BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/developers.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib
|
||||||
#gpglib_test
|
#gpglib_test
|
||||||
|
|
||||||
# Load head messages
|
# 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 gpg messages
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers"
|
load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
########### MAIN PROGRAM ###########
|
########### MAIN PROGRAM ###########
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# profile_restore.sh
|
# Script: profile_restore.sh
|
||||||
# Modified: 2024/12/15 14:27:00
|
# Description: para restaurar copia de seguridad del perfil del desarrollador
|
||||||
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
# Created: 2024/12/15 14:27:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
@ -17,36 +21,48 @@
|
||||||
# Debería haber recibido una copia de la Licencia Pública Affero General
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
VERSION=0.98.0
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# LOAD BASE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
|
||||||
#baselib_test
|
#baselib_test
|
||||||
|
|
||||||
# LOAD CONSOLE BASH LIBRARY
|
# LOAD CONSOLE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/console.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
|
||||||
#consolelib_test
|
#consolelib_test
|
||||||
|
|
||||||
# LOAD SQLITE3 BASH LIBRARY
|
# LOAD SQLITE3 BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/sqlite.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib
|
||||||
#sqlitelib_test
|
#sqlitelib_test
|
||||||
|
|
||||||
# LOAD DEVELOPERS BASH LIBRARY
|
# LOAD DEVELOPERS BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/developers.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib
|
||||||
#gpglib_test
|
#gpglib_test
|
||||||
|
|
||||||
# Load head messages
|
# 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 gpg messages
|
||||||
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers"
|
load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers"
|
||||||
|
|
||||||
# Function to display help message
|
# Function to display help message
|
||||||
function help() {
|
function help() {
|
||||||
|
|
|
@ -2,7 +2,10 @@
|
||||||
#
|
#
|
||||||
# Script: project_new.sh
|
# Script: project_new.sh
|
||||||
# Description: Crea una carpeta de proyecto con la estructura requerida
|
# 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. <mauro@rosero.one>
|
||||||
|
#
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
# Directorios base
|
# Configuración inicial
|
||||||
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BASE_DIR="$(dirname "$SCRIPT_DIR")"
|
BIN_BASE="bin"
|
||||||
CONFIG_DIR="$SCRIPT_DIR/config"
|
BIN_LIBS="lib"
|
||||||
LIB_DIR="$SCRIPT_DIR/lib"
|
BIN_MESG="msg"
|
||||||
MSG_DIR="$SCRIPT_DIR/msg"
|
BIN_CFGS="config"
|
||||||
|
|
||||||
# Cargar libraries
|
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
||||||
source "$LIB_DIR/base.lib"
|
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
|
||||||
source "$LIB_DIR/console.lib"
|
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
|
||||||
source "$MSG_DIR/head.es"
|
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
|
# Variables globales
|
||||||
title="${head_000} ${head_002}"
|
title="${head_000} ${head_002}"
|
||||||
|
@ -102,7 +124,7 @@ function get_projects_folder() {
|
||||||
if [ -f "$CONFIG_DIR/projects.dat" ]; then
|
if [ -f "$CONFIG_DIR/projects.dat" ]; then
|
||||||
PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat")
|
PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat")
|
||||||
else
|
else
|
||||||
PROJECTS_DIR_NAME="proyectos"
|
PROJECTS_DIR_NAME="projects"
|
||||||
echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat"
|
echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -151,7 +173,8 @@ function request_project_name() {
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
request_project_name
|
request_project_name
|
||||||
else
|
else
|
||||||
echo "${proj_007}"
|
dialog_error_box "$head_error" "${proj_007}"
|
||||||
|
clear
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -860,6 +883,10 @@ function main() {
|
||||||
|
|
||||||
# Crear estructura del proyecto
|
# Crear estructura del proyecto
|
||||||
create_project_structure
|
create_project_structure
|
||||||
|
|
||||||
|
# Limpiar Consola
|
||||||
|
clear
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Ejecutar función principal
|
# Ejecutar función principal
|
||||||
|
|
370
bin/qr_secret.sh
Executable file
370
bin/qr_secret.sh
Executable file
|
@ -0,0 +1,370 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# 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 <cortana@rosero.one>
|
||||||
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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 <cortana@rosero.one>
|
||||||
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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 <cortana@rosero.one>
|
||||||
|
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
|
#
|
||||||
|
# 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 <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
|
||||||
|
|
||||||
|
# Variables globales
|
||||||
|
title="${head_000} ${head_002}"
|
||||||
|
apps_title="${qrmsg_000}"
|
||||||
|
|
||||||
|
# Verificar dependencias
|
||||||
|
check_dependencies() {
|
||||||
|
|
||||||
|
# Verificar si zbar está instalado
|
||||||
|
if ! command -v zbarimg &> /dev/null; then
|
||||||
|
dialog_error_box "${head_error}" "${qrmsg_014}. ${cvmsg_014}"
|
||||||
|
clear
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar si sops está instalado
|
||||||
|
if ! command -v sops &> /dev/null; then
|
||||||
|
dialog_error_box "${head_error}" "${cvmsg_013}. ${cvmsg_014}"
|
||||||
|
clear
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Validar formato del nombre
|
||||||
|
validate_name() {
|
||||||
|
local name="$1"
|
||||||
|
|
||||||
|
# Verificar si el nombre está vacío
|
||||||
|
if [ -z "$name" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar si el nombre contiene espacios
|
||||||
|
if [[ "$name" =~ [[:space:]] ]]; then
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar si el nombre contiene caracteres no permitidos
|
||||||
|
if ! [[ "$name" =~ ^[a-zA-Z0-9._-]+$ ]]; then
|
||||||
|
return 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Solicitar nombre del archivo
|
||||||
|
get_output_name() {
|
||||||
|
local name=""
|
||||||
|
local valid=false
|
||||||
|
|
||||||
|
while [ "$valid" != "true" ]; do
|
||||||
|
# Solicitar nombre
|
||||||
|
dialog_input_box "${qrmsg_001}" "${qrmsg_002}" ""
|
||||||
|
|
||||||
|
if [ $codex -ne 0 ]; then
|
||||||
|
# Usuario canceló
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
name="$value"
|
||||||
|
|
||||||
|
# Validar nombre
|
||||||
|
validate_name "$name"
|
||||||
|
local validation_result=$?
|
||||||
|
|
||||||
|
case $validation_result in
|
||||||
|
0)
|
||||||
|
valid="true"
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
dialog_error_box "${qrmsg_012}" "${qrmsg_004}"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
dialog_error_box "${qrmsg_012}" "${qrmsg_005}"
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
dialog_error_box "${qrmsg_012}" "${qrmsg_006}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "$name"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extraer secreto de imagen QR
|
||||||
|
extract_secret() {
|
||||||
|
local qr_file="$1"
|
||||||
|
|
||||||
|
# Usar zbarimg para extraer el texto del QR
|
||||||
|
local secret=$(zbarimg --quiet --raw "$qr_file")
|
||||||
|
local result=$?
|
||||||
|
|
||||||
|
if [ $result -ne 0 ] || [ -z "$secret" ]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Si el secreto comienza con "otpauth://", extraer solo el secreto
|
||||||
|
if [[ "$secret" == otpauth://* ]]; then
|
||||||
|
# Extraer el valor después de "secret="
|
||||||
|
secret=$(echo "$secret" | grep -oP 'secret=\K[A-Z0-9]+')
|
||||||
|
|
||||||
|
# Si no se pudo extraer el secreto, mostrar error
|
||||||
|
if [ -z "$secret" ]; then
|
||||||
|
return 2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$(echo "$secret" | base64)"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Guardar secreto encriptado con SOPS
|
||||||
|
save_encrypted_secret() {
|
||||||
|
local name="$1"
|
||||||
|
local secret="$2"
|
||||||
|
local output_file="${DEVELOPER_DIR}/${name}.totp.yaml"
|
||||||
|
|
||||||
|
# Crear archivo YAML temporal con el secreto
|
||||||
|
local temp_file=$(mktemp)
|
||||||
|
echo "secret: $secret" > "$temp_file"
|
||||||
|
|
||||||
|
# Encriptar el archivo con SOPS
|
||||||
|
sops --encrypt "$temp_file" > "$output_file"
|
||||||
|
local result=$?
|
||||||
|
|
||||||
|
# Eliminar archivo temporal
|
||||||
|
rm -f "$temp_file"
|
||||||
|
|
||||||
|
# Establecer permisos adecuados
|
||||||
|
if [ $result -eq 0 ]; then
|
||||||
|
chmod 600 "$output_file"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función principal
|
||||||
|
main() {
|
||||||
|
|
||||||
|
# Verificar si dialog está instalado
|
||||||
|
if ! command -v dialog &> /dev/null; then
|
||||||
|
# Sin dialog, tenemos que usar echo
|
||||||
|
echo "Error: ${qrmsg_013}. ${cvmsg_014}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar dependencias
|
||||||
|
check_dependencies
|
||||||
|
|
||||||
|
# Seleccionar archivo QR
|
||||||
|
# Usar dialog_input_filepath de console.lib para seleccionar un archivo
|
||||||
|
local home_dir="$HOME/*.jpg"
|
||||||
|
dialog_input_filepath "$home_dir" "${qrmsg_003}"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
clear
|
||||||
|
dialog_error_box "${head_info}" "${qrmsg_010}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verificar el resultado
|
||||||
|
if [ "$valid_file" == "1" ]; then
|
||||||
|
qr_file="$result"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
# Usuario canceló o no seleccionó un archivo válido
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extraer secreto de la imagen QR
|
||||||
|
local secret=$(extract_secret "$qr_file")
|
||||||
|
local extract_status=$?
|
||||||
|
|
||||||
|
# Solicitar nombre del archivo
|
||||||
|
local output_name=$(get_output_name)
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
clear
|
||||||
|
dialog_error_box "${head_info}" "${qrmsg_010}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if [ $extract_status -ne 0 ]; then
|
||||||
|
dialog_error_box "${qrmsg_012}" "${qrmsg_007}"
|
||||||
|
clear
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Guardar secreto encriptado
|
||||||
|
save_encrypted_secret "$output_name" "$secret"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
dialog_error_box "${qrmsg_011}" "${qrmsg_008} ${DEVELOPER_DIR}/${output_name}.totp.yaml"
|
||||||
|
else
|
||||||
|
dialog_error_box "${qrmsg_012}" "${qrmsg_009}"
|
||||||
|
clear
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
clear
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ejecutar función principal
|
||||||
|
main
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# update.sh
|
# Script: update.sh
|
||||||
# Modified: 2024/12/01 15:27:00
|
# Description: Script para update.sh
|
||||||
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
# Created: 2025/03/15 18:25:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_MESG=bin/msg
|
|
||||||
BIN_LIBS=bin/lib
|
|
||||||
|
|
||||||
# CHECK SHELL LANGUAGE
|
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
||||||
BIN_LANG=${LANG:0:2}
|
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
|
# LOAD BASE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
|
||||||
#baselib_test
|
#baselib_test
|
||||||
|
|
||||||
load_bootstrap_msg() {
|
load_bootstrap_msg() {
|
||||||
|
@ -59,7 +72,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Load bootstrap library for update functions
|
# 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)
|
# Update sistema operativo y repositorios primero (no requiere privilegios de root)
|
||||||
echo -e "\n${head_info}: Actualizando repositorios locales primero..."
|
echo -e "\n${head_info}: Actualizando repositorios locales primero..."
|
||||||
|
@ -182,5 +195,36 @@ else
|
||||||
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
|
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Actualizar herramientas adicionales si están instaladas
|
||||||
|
update_additional_tools() {
|
||||||
|
local BIN_PATH=$1
|
||||||
|
local LIBRARY=$2
|
||||||
|
local MESSAGES=$3
|
||||||
|
local UPDATE_LANG=$4
|
||||||
|
|
||||||
|
# Cargar biblioteca bootstrap para acceder a las funciones de instalación
|
||||||
|
source "$BIN_PATH/$BIN_BASE/$LIBRARY/bootstrap.lib"
|
||||||
|
|
||||||
|
# Actualizar oathtool si está instalado
|
||||||
|
command_installed oathtool
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "\n${head_info}: Actualizando oathtool..."
|
||||||
|
oathtool_install
|
||||||
|
echo -e "${head_info}: oathtool actualizado correctamente."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Actualizar zbar si está instalado
|
||||||
|
command_installed zbar-tools
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "\n${head_info}: Actualizando zbar..."
|
||||||
|
zbar_install
|
||||||
|
echo -e "${head_info}: zbar actualizado correctamente."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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_BASE $BIN_LIBS $BIN_MESG $BIN_LANG"
|
||||||
|
|
||||||
echo -e "\n${head_info}: Proceso de actualización completado."
|
echo -e "\n${head_info}: Proceso de actualización completado."
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# vpn_install.sh
|
# Script: vpn_install.sh
|
||||||
# Modified: 2024/12/01 15:27:00
|
# Description: Script para vpn_install.sh
|
||||||
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
|
# Created: 2024/12/01 15:27:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# bajo los términos de la Licencia Pública Affero General de GNU tal como
|
||||||
|
@ -17,18 +21,34 @@
|
||||||
# Debería haber recibido una copia de la Licencia Pública Affero General
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_MESG=bin/msg
|
|
||||||
BIN_LIBS=bin/lib
|
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
|
||||||
VERSION=1.0.1
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# Importar bibliotecas necesarias
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
|
||||||
#baselib_test
|
|
||||||
|
# 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() {
|
function load_bootstrap_msg() {
|
||||||
|
|
||||||
|
@ -92,9 +112,6 @@ function install() {
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
# Load messages
|
|
||||||
load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG
|
|
||||||
|
|
||||||
# Check for arguments option
|
# Check for arguments option
|
||||||
help=false
|
help=false
|
||||||
version=false
|
version=false
|
||||||
|
@ -131,7 +148,8 @@ if $version; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Display Headers
|
# Display Headers
|
||||||
display_devstools_header "- $title"
|
display_devstools_header "PRITUNL VPN"
|
||||||
|
|
||||||
# Run install with sudo
|
# 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"
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#
|
#
|
||||||
# vpn_users.sh
|
# Script: vpn_users.sh
|
||||||
# Modified: 2024/12/01 15:27:00
|
# Description: Script para vpn_users.sh
|
||||||
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
|
# Created: 2024/12/01 15:27:00
|
||||||
|
# Modified: 2025/03/19 11:57:08
|
||||||
|
# [Author] Mauro Rosero P. <mauro@rosero.one>
|
||||||
|
#
|
||||||
|
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
|
||||||
#
|
#
|
||||||
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
|
# 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
|
# 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
|
# Debería haber recibido una copia de la Licencia Pública Affero General
|
||||||
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
DEVSPATH=devs
|
# Configuración inicial
|
||||||
BIN_HOME=$HOME/$DEVSPATH
|
# Usar DEVELOPER_DIR de base.lib
|
||||||
BIN_MESG=bin/msg
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
BIN_LIBS=bin/lib
|
BIN_BASE="bin"
|
||||||
BIN_CFGS=bin/config
|
BIN_LIBS="lib"
|
||||||
VERSION=1.0.1
|
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
|
# CHECK SHELL LANGUAGE
|
||||||
BIN_LANG=${LANG:0:2}
|
BIN_LANG=${LANG:0:2}
|
||||||
|
|
||||||
# LOAD BASE BASH LIBRARY
|
# LOAD BASE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/base.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
|
||||||
#baselib_test
|
#baselib_test
|
||||||
|
|
||||||
|
|
||||||
# LOAD CONSOLE BASH LIBRARY
|
# LOAD CONSOLE BASH LIBRARY
|
||||||
source $BIN_HOME/$BIN_LIBS/console.lib
|
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
|
||||||
#consolelib_test
|
#consolelib_test
|
||||||
|
|
||||||
|
|
||||||
# Load head messages
|
# 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 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 to display help message
|
||||||
function help() {
|
function help() {
|
||||||
|
@ -61,7 +76,7 @@ function vpn_pritunl_users_form() {
|
||||||
|
|
||||||
declare -a ARRAY
|
declare -a ARRAY
|
||||||
c_val[0]=013
|
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
|
if [ $? -ne 0 ]; then
|
||||||
ARRAY[0]=""
|
ARRAY[0]=""
|
||||||
c_val[0]=0
|
c_val[0]=0
|
||||||
|
@ -104,10 +119,10 @@ function vpn_pritunl_users_form() {
|
||||||
display_devstools_header "${plmsg_000}"
|
display_devstools_header "${plmsg_000}"
|
||||||
if [ "${action}" != "remove" ]
|
if [ "${action}" != "remove" ]
|
||||||
then
|
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]}"
|
-e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]} input_pritunl_email=${response[2]}"
|
||||||
else
|
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]}"
|
-e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]}"
|
||||||
fi
|
fi
|
||||||
read -p "${head_pause}"
|
read -p "${head_pause}"
|
||||||
|
|
21
sops/jarvis.sops.yaml
Normal file
21
sops/jarvis.sops.yaml
Normal file
|
@ -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"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue