#!/bin/bash echo "🚀 Instalando comando git subir..." CONFIG="$HOME/.config/git-subir.conf" BIN="$HOME/.local/bin/git-subir" 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" < "$BIN" <<'EOF' #!/bin/bash CONFIG="$HOME/.config/git-subir.conf" mkdir -p "$(dirname "$CONFIG")" source "$CONFIG" guardar_config() { cat > "$CONFIG" </dev/null) if [[ -z "$cred_descifrada" ]]; then echo "❌ Contraseña incorrecta. Abortando." exit 1 fi read -s -p "🔑 Nueva contraseña: " newpass echo "" 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 es necesario if [[ -n "$SALT" ]]; then read -s -p "🔑 Contraseña para descifrado: " pass echo "" 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) 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 read -p "🌐 URL del remoto origin: " remote_url 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 el mensaje de commit? (s/n): " respuesta if [[ "$respuesta" == "s" ]]; then read -p "📝 Ingresá el mensaje de commit: " mensaje else 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 # 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" else 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"