revicion con cambio passwd ssl
This commit is contained in:
@ -1,36 +1,70 @@
|
||||
#!/bin/bash
|
||||
# =========================================================
|
||||
# Script: git-subir.sh
|
||||
# Autor: Nahuel (adaptado con QA)
|
||||
# Descripción: Automatiza commits y pushes a Gitea con
|
||||
# soporte de credenciales cifradas.
|
||||
# =========================================================
|
||||
|
||||
echo "🚀 Instalando comando git subir..."
|
||||
|
||||
CONFIG="$HOME/.config/git-subir.conf"
|
||||
BIN="$HOME/.local/bin/git-subir"
|
||||
|
||||
# Cargar configuración si existe
|
||||
if [[ -f "$CONFIG" ]]; then
|
||||
source "$CONFIG"
|
||||
mkdir -p "$(dirname "$CONFIG")"
|
||||
mkdir -p "$(dirname "$BIN")"
|
||||
|
||||
# Solicitar credenciales
|
||||
read -p "👤 Usuario de Gitea: " usuario
|
||||
read -s -p "🔑 Token o contraseña: " token
|
||||
echo ""
|
||||
read -p "🌐 URL base de la API de Gitea: " url
|
||||
|
||||
# Validar autenticación
|
||||
resp=$(curl -s -u "$usuario:$token" "$url/api/v1/user")
|
||||
if echo "$resp" | grep -q "\"login\":\"$usuario\""; then
|
||||
echo "✅ Autenticación exitosa con $url/api/v1/user"
|
||||
else
|
||||
echo "❌ Falló la autenticación. Abortando."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Cifrado opcional
|
||||
read -p "🔐 ¿Querés cifrar las credenciales? (s/n): " cifrar
|
||||
if [[ "$cifrar" == "s" ]]; then
|
||||
read -s -p "🔑 Contraseña para cifrado: " pass
|
||||
echo ""
|
||||
salt=$(openssl rand -hex 16)
|
||||
cred="$usuario:$token"
|
||||
cred_cifrada=$(echo -n "$cred" | openssl enc -aes-256-cbc -a -pbkdf2 -salt -pass pass:"$pass")
|
||||
else
|
||||
cred_cifrada="$usuario:$token"
|
||||
salt=""
|
||||
fi
|
||||
|
||||
# Guardar configuración
|
||||
cat > "$CONFIG" <<EOF
|
||||
URL=$url
|
||||
CRED=$cred_cifrada
|
||||
SALT=$salt
|
||||
EOF
|
||||
|
||||
# Generar script git-subir con commit interactivo
|
||||
cat > "$BIN" <<'EOF'
|
||||
#!/bin/bash
|
||||
CONFIG="$HOME/.config/git-subir.conf"
|
||||
mkdir -p "$(dirname "$CONFIG")"
|
||||
source "$CONFIG"
|
||||
|
||||
guardar_config() {
|
||||
mkdir -p "$(dirname "$CONFIG")"
|
||||
cat > "$CONFIG" <<EOF
|
||||
cat > "$CONFIG" <<EOF2
|
||||
URL=$URL
|
||||
CRED=$CRED
|
||||
EOF
|
||||
SALT=$SALT
|
||||
EOF2
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Reconfigurar credenciales
|
||||
# ---------------------------------------------------------
|
||||
if [[ "$1" == "--reconfigurar" ]]; then
|
||||
echo "🔄 Reconfigurando credenciales..."
|
||||
read -p "👤 Usuario de Gitea: " usuario
|
||||
read -s -p "🔑 Token o contraseña: " token
|
||||
echo ""
|
||||
read -p "🌐 URL base de la API de Gitea: " URL
|
||||
|
||||
resp=$(curl -s -u "$usuario:$token" "$URL/api/v1/user")
|
||||
if echo "$resp" | grep -q "\"login\":\"$usuario\""; then
|
||||
echo "✅ Autenticación exitosa con $URL/api/v1/user"
|
||||
@ -38,75 +72,61 @@ if [[ "$1" == "--reconfigurar" ]]; then
|
||||
echo "❌ Falló la autenticación. Abortando."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "🔐 ¿Querés cifrar las credenciales? (s/n): " cifrar
|
||||
if [[ "$cifrar" == "s" ]]; then
|
||||
read -s -p "🔑 Contraseña para cifrado: " pass
|
||||
echo ""
|
||||
CRED=$(echo -n "$usuario:$token" | openssl enc -aes-256-cbc -a -pbkdf2 -pass pass:"$pass")
|
||||
SALT=$(openssl rand -hex 16)
|
||||
CRED=$(echo -n "$usuario:$token" | openssl enc -aes-256-cbc -a -pbkdf2 -salt -pass pass:"$pass")
|
||||
else
|
||||
CRED="$usuario:$token"
|
||||
SALT=""
|
||||
fi
|
||||
|
||||
guardar_config
|
||||
echo "✅ Reconfiguración completa."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Cambiar la clave de cifrado
|
||||
# ---------------------------------------------------------
|
||||
# Cambiar solo la clave de cifrado
|
||||
if [[ "$1" == "--cambiar-clave" ]]; then
|
||||
echo "🔐 Cambiando contraseña de cifrado..."
|
||||
if [[ -z "$CRED" ]]; then
|
||||
echo "⚠️ No hay credenciales guardadas. Abortando."
|
||||
if [[ -z "$SALT" ]]; then
|
||||
echo "⚠️ Las credenciales no están cifradas. No se puede cambiar la clave."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -s -p "🔑 Contraseña actual: " oldpass
|
||||
echo ""
|
||||
cred_descifrada=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -pass pass:"$oldpass" 2>/dev/null)
|
||||
|
||||
cred_descifrada=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -salt -pass pass:"$oldpass" 2>/dev/null)
|
||||
if [[ -z "$cred_descifrada" ]]; then
|
||||
echo "❌ Contraseña incorrecta. Abortando."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -s -p "🔑 Nueva contraseña: " newpass
|
||||
echo ""
|
||||
CRED=$(echo -n "$cred_descifrada" | openssl enc -aes-256-cbc -a -pbkdf2 -pass pass:"$newpass")
|
||||
|
||||
SALT=$(openssl rand -hex 16)
|
||||
CRED=$(echo -n "$cred_descifrada" | openssl enc -aes-256-cbc -a -pbkdf2 -salt -pass pass:"$newpass")
|
||||
guardar_config
|
||||
echo "✅ Contraseña de cifrado actualizada."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Descifrar credenciales si están cifradas
|
||||
# ---------------------------------------------------------
|
||||
if [[ "$CRED" =~ ^[A-Za-z0-9+/=]+$ ]]; then
|
||||
# Descifrar credenciales si es necesario
|
||||
if [[ -n "$SALT" ]]; then
|
||||
read -s -p "🔑 Contraseña para descifrado: " pass
|
||||
echo ""
|
||||
descifrado=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -pass pass:"$pass" 2>/dev/null)
|
||||
if [[ -n "$descifrado" ]]; then
|
||||
CRED="$descifrado"
|
||||
CRED=$(echo "$CRED" | openssl enc -aes-256-cbc -a -d -pbkdf2 -salt -pass pass:"$pass" 2>/dev/null)
|
||||
if [[ -z "$CRED" ]]; then
|
||||
echo "❌ Contraseña incorrecta. Abortando."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
usuario=$(echo "$CRED" | cut -d: -f1)
|
||||
token=$(echo "$CRED" | cut -d: -f2)
|
||||
|
||||
# Validar URL
|
||||
if [[ -z "$URL" ]]; then
|
||||
echo "❌ No se encontró la URL de Gitea en la configuración."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "📤 Subiendo cambios como $usuario a $URL..."
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Verificar si es repo git
|
||||
# ---------------------------------------------------------
|
||||
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
echo "📁 No estás en un repositorio git. Inicializando..."
|
||||
git init
|
||||
@ -114,38 +134,56 @@ if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
||||
git remote add origin "$remote_url"
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Detectar cambios sin commitear
|
||||
# ---------------------------------------------------------
|
||||
if [[ -n "$(git status --porcelain)" ]]; then
|
||||
echo "📦 Hay cambios sin commitear."
|
||||
read -p "❓ ¿Querés escribir un mensaje de commit? (s/n): " respuesta
|
||||
read -p "¿Querés escribir el mensaje de commit? (s/n): " respuesta
|
||||
if [[ "$respuesta" == "s" ]]; then
|
||||
mensaje=""
|
||||
while [[ -z "$mensaje" ]]; do
|
||||
read -p "📝 Ingresá el mensaje de commit: " mensaje
|
||||
done
|
||||
git add -A
|
||||
git commit -m "$mensaje"
|
||||
read -p "📝 Ingresá el mensaje de commit: " mensaje
|
||||
else
|
||||
git add -A
|
||||
git commit -m "Auto-commit"
|
||||
echo "✅ Commit automático generado."
|
||||
mensaje="Commit automático desde git-subir"
|
||||
fi
|
||||
git add -A
|
||||
git commit -m "$mensaje"
|
||||
else
|
||||
echo "✅ No hay cambios pendientes. Continuando con el push..."
|
||||
fi
|
||||
|
||||
# ---------------------------------------------------------
|
||||
# Push con verificación de upstream
|
||||
# ---------------------------------------------------------
|
||||
# Verificar si la rama tiene upstream
|
||||
branch=$(git rev-parse --abbrev-ref HEAD)
|
||||
remote=$(git config --get branch.$branch.remote)
|
||||
|
||||
if [[ -z "$remote" ]]; then
|
||||
echo "⚠️ La rama '$branch' no tiene remoto configurado."
|
||||
echo "👉 Ejecutando: git push --set-upstream origin $branch"
|
||||
git push --set-upstream origin "$branch" || { echo "❌ Falló el push."; exit 1; }
|
||||
git push --set-upstream origin "$branch"
|
||||
else
|
||||
git push || { echo "❌ Falló el push."; exit 1; }
|
||||
git push
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod +x "$BIN"
|
||||
|
||||
# Validar PATH
|
||||
SHELL_RC="$HOME/.bashrc"
|
||||
[[ "$SHELL" == */zsh ]] && SHELL_RC="$HOME/.zshrc"
|
||||
grep -q "$HOME/.local/bin" <<< "$PATH" || echo 'export PATH="$HOME/.local/bin:$PATH"' >> "$SHELL_RC"
|
||||
|
||||
# Configurar alias
|
||||
git config --global alias.subir "!git-subir"
|
||||
|
||||
echo "✅ Alias 'git subir' configurado."
|
||||
echo "👉 Ejecutá 'source $SHELL_RC' o reiniciá la terminal para aplicar el PATH."
|
||||
|
||||
# Verificación final
|
||||
if command -v git-subir >/dev/null; then
|
||||
echo "✅ El comando 'git-subir' está disponible."
|
||||
else
|
||||
echo "⚠️ El comando 'git-subir' aún no está disponible."
|
||||
fi
|
||||
|
||||
echo "🎉 Instalación completa."
|
||||
echo "🛠️ Opciones disponibles para el comando:"
|
||||
echo " git subir # Ejecuta git push con autenticación"
|
||||
echo " git subir --reconfigurar # Cambia usuario, token, URL y clave"
|
||||
echo " git subir --cambiar-clave # Cambia solo la contraseña de cifrado"
|
||||
|
Reference in New Issue
Block a user