From 025b9f154193c195f483fffb1ab7cead08b3037c Mon Sep 17 00:00:00 2001 From: nbaglietto Date: Sat, 16 Aug 2025 03:21:15 -0300 Subject: [PATCH] se agrego cifrado de credenciales con openssl --- README.md | 76 ++++++++++++---------------------- desinstalar-subir.sh | 8 ++-- instalar-subir.sh | 98 ++++++++++++++++++++++++++++++-------------- 3 files changed, 97 insertions(+), 85 deletions(-) mode change 100644 => 100755 desinstalar-subir.sh diff --git a/README.md b/README.md index 00cc599..2d641bd 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,55 @@ -# 🛠️ Git Subir – Automatización de Push con Gitea +# 🛠️ git subir -Este paquete te permite ejecutar `git subir` como un comando personalizado que: - -- Detecta cambios sin commitear -- Realiza commit automático si lo deseás -- Maneja push con credenciales de Gitea -- Resuelve conflictos de merge automáticamente -- Valida credenciales antes de instalarse +Comando personalizado para subir cambios a un repositorio Gitea con autenticación automática, manejo de conflictos y commits interactivos. --- -## 📦 Instalación +## 🚀 Instalación ```bash -chmod +x instalar-subir.sh ./instalar-subir.sh -Durante la instalación se te pedirá: -Usuario de Gitea +Verifica e instala openssl si falta. -Contraseña o token +Solicita usuario y token de Gitea. -Validación automática contra el servidor +Verifica credenciales contra la API. -🚀 Uso -Desde cualquier repositorio Git: +Permite guardar credenciales cifradas o en texto plano. -bash -git subir -El script: +Crea el comando global git subir. -Detecta cambios sin commitear +Seguridad +Las credenciales pueden guardarse cifradas con openssl. -Te pregunta si querés hacer commit automático - -Intenta hacer git push con tus credenciales - -Si falla, hace git pull --allow-unrelated-histories - -Detecta conflictos y te pregunta si querés hacer merge automático +Se descifran al ejecutar git subir mediante contraseña. 🧹 Desinstalación bash -chmod +x desinstalar-subir.sh ./desinstalar-subir.sh -Esto elimina: +Elimina el comando, el script y las credenciales. -El alias git subir +✨ Funcionalidades de git subir +Detecta cambios sin commitear y ofrece hacer commit automático. -El script principal +Realiza git push con autenticación embebida. -Las credenciales guardadas +Si el push falla, intenta git pull --allow-unrelated-histories. -📁 Archivos creados -~/.scripts/git-subir.sh: script principal +Detecta conflictos y ofrece merge automático. -~/.scripts/.env: credenciales (modo seguro) +Muestra mensajes claros y estructurados. -/usr/local/bin/git-subir: alias ejecutable +📦 Requisitos +openssl -🔐 Seguridad -Las credenciales se guardan en modo 600 (solo lectura para el usuario). -No se comparten ni se suben a ningún repositorio. - -Podés borrarlas en cualquier momento con el desinstalador. - -🧩 Requisitos -Git instalado - -Acceso a Gitea con token o contraseña - -Permisos para escribir en /usr/local/bin 🧠 Autor -Este sistema fue diseñado para automatizar flujos Git en entornos con Gitea, optimizando la experiencia de push y manejo de conflictos. +Nahuel Baglietto — Scripts diseñados para mejorar la experiencia de trabajo con Git y Gitea. + +Código + +--- + +¿Querés que también agregue una opción en el instalador para instalar el comando solo diff --git a/desinstalar-subir.sh b/desinstalar-subir.sh old mode 100644 new mode 100755 index d0fa34d..844ecfc --- a/desinstalar-subir.sh +++ b/desinstalar-subir.sh @@ -1,13 +1,11 @@ #!/bin/bash set -e -echo "🧹 Eliminando alias git-subir..." +echo "🧹 Desinstalando git subir..." + sudo rm -f /usr/local/bin/git-subir - -echo "🧹 Eliminando script principal..." rm -f "$HOME/.scripts/git-subir.sh" - -echo "🧹 Eliminando credenciales..." rm -f "$HOME/.scripts/.env" +rm -f "$HOME/.scripts/.env.enc" echo "✅ Desinstalación completa." diff --git a/instalar-subir.sh b/instalar-subir.sh index 902f762..a85d6e6 100755 --- a/instalar-subir.sh +++ b/instalar-subir.sh @@ -1,15 +1,77 @@ #!/bin/bash set -e -# 📁 Crear directorio de scripts +echo "🔧 Instalación del comando git subir" + +# 📦 Verificar openssl +if ! command -v openssl &> /dev/null; then + echo "⚠️ openssl no está instalado. Instalando..." + if command -v apt &> /dev/null; then + sudo apt update && sudo apt install -y openssl + elif command -v pacman &> /dev/null; then + sudo pacman -Sy --noconfirm openssl + else + echo "❌ No se pudo instalar openssl automáticamente. Instalalo manualmente." + exit 1 + fi +fi + +# 📁 Crear carpeta mkdir -p "$HOME/.scripts" -# 📜 Copiar script principal +# 🔄 Reconfigurar si existen credenciales +if [[ -f "$HOME/.scripts/.env" || -f "$HOME/.scripts/.env.enc" ]]; then + read -p "⚠️ Ya existen credenciales. ¿Querés reconfigurarlas? (s/n): " reconfig + [[ "$reconfig" != "s" ]] && echo "🚫 Instalación cancelada." && exit 0 +fi + +# 🔐 Solicitar credenciales +read -p "👤 Usuario de Gitea: " GITEA_USER +read -s -p "🔑 Token o contraseña: " GITEA_TOKEN +echo "" +read -p "🌐 URL base de la API de Gitea (ej: https://gitea.midominio.org): " GITEA_API_URL + +# 🔎 Verificar credenciales +response=$(curl -s -u "$GITEA_USER:$GITEA_TOKEN" "$GITEA_API_URL/api/v1/user") +if ! echo "$response" | grep -q '"login":"'"$GITEA_USER"'"'; then + echo "❌ Credenciales inválidas. Abortando instalación." + exit 1 +fi + +# 🔐 Cifrar si desea +read -p "¿Querés guardar las credenciales cifradas con openssl? (s/n): " cifrar +if [[ "$cifrar" == "s" ]]; then + echo "🔐 Ingresá una contraseña para cifrar:" + read -s passphrase + echo -e "GITEA_USER=$GITEA_USER\nGITEA_TOKEN=$GITEA_TOKEN\nGITEA_API_URL=$GITEA_API_URL" | \ + openssl enc -aes-256-cbc -salt -out "$HOME/.scripts/.env.enc" -pass pass:"$passphrase" + rm -f "$HOME/.scripts/.env" + echo "✅ Credenciales cifradas guardadas." +else + echo -e "GITEA_USER=$GITEA_USER\nGITEA_TOKEN=$GITEA_TOKEN\nGITEA_API_URL=$GITEA_API_URL" > "$HOME/.scripts/.env" + chmod 600 "$HOME/.scripts/.env" + rm -f "$HOME/.scripts/.env.enc" + echo "⚠️ Credenciales guardadas sin cifrar." +fi + +# 📜 Script principal cat <<'EOF' > "$HOME/.scripts/git-subir.sh" #!/bin/bash set -e -source "$HOME/.scripts/.env" +# 🔐 Cargar credenciales +if [[ -f "$HOME/.scripts/.env.enc" ]]; then + echo "🔐 Ingresá la contraseña para descifrar tus credenciales:" + read -s passphrase + openssl enc -aes-256-cbc -d -in "$HOME/.scripts/.env.enc" -pass pass:"$passphrase" > /tmp/.env.dec + source /tmp/.env.dec + rm /tmp/.env.dec +elif [[ -f "$HOME/.scripts/.env" ]]; then + source "$HOME/.scripts/.env" +else + echo "❌ No se encontraron credenciales. Ejecutá instalar-subir.sh primero." + exit 1 +fi remote_url=$(git remote get-url origin | sed 's|https://||') auth_url="https://$GITEA_USER:$GITEA_TOKEN@$remote_url" @@ -24,7 +86,6 @@ function marco() { if ! git diff-index --quiet HEAD; then echo "📦 Se detectaron cambios sin commitear:" git status -s - read -p "¿Querés hacer commit automático de estos cambios? (s/n): " auto_commit if [[ "$auto_commit" == "s" ]]; then read -p "📝 Ingresá el mensaje de commit: " mensaje @@ -62,34 +123,9 @@ EOF chmod +x "$HOME/.scripts/git-subir.sh" -# 🔗 Crear alias ejecutable +# 🔗 Alias global echo "Creando alias git-subir..." -cat < /dev/null -#!/bin/bash -exec "$HOME/.scripts/git-subir.sh" "\$@" -EOF - +echo -e "#!/bin/bash\nexec \"$HOME/.scripts/git-subir.sh\" \"\$@\"" | sudo tee /usr/local/bin/git-subir > /dev/null sudo chmod +x /usr/local/bin/git-subir -# 🔐 Credenciales -echo "🔐 Configurando credenciales de Gitea..." -read -p "Usuario de Gitea: " GITEA_USER -read -s -p "Contraseña o Token: " GITEA_TOKEN -echo "" - -echo "🔎 Verificando credenciales..." -response=$(curl -s -u "$GITEA_USER:$GITEA_TOKEN" https://gitea.espaciomemoria.ar/api/v1/user) - -if echo "$response" | grep -q '"login":"'"$GITEA_USER"'"'; then - echo "✅ Credenciales válidas." - echo "GITEA_USER=$GITEA_USER" > "$HOME/.scripts/.env" - echo "GITEA_TOKEN=$GITEA_TOKEN" >> "$HOME/.scripts/.env" - chmod 600 "$HOME/.scripts/.env" -else - echo "❌ Credenciales inválidas. Abortando instalación." - sudo rm -f /usr/local/bin/git-subir - rm -rf "$HOME/.scripts/git-subir.sh" - exit 1 -fi - echo "✅ Instalación completa. Usá el comando: git subir"