From 6891342483fd39eb544c72abb999a56630b0d2f8 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Sat, 15 Mar 2025 14:44:03 -0500 Subject: [PATCH] =?UTF-8?q?[IMPROVED]=20A=C3=B1adir=20detecci=C3=B3n=20aut?= =?UTF-8?q?om=C3=A1tica=20de=20URL=20de=20Forgejo=20en=20fj=5Flogin.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agregar función get_forgejo_url() para extraer URL de configuración git - Configurar automáticamente BERG_BASE_URL antes de la autenticación - Buscar en múltiples ubicaciones: configuración global, directorio actual y repos del HOME - Extraer el dominio base de diferentes formatos de URL (https://, git@, etc.) - Mejorar mensajes informativos sobre la URL del servidor utilizada 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/fj_login.sh | 72 ++++++++++++++++++++++++++++++++++++------------- 1 file changed, 54 insertions(+), 18 deletions(-) diff --git a/bin/fj_login.sh b/bin/fj_login.sh index 0b33369..27ec78f 100755 --- a/bin/fj_login.sh +++ b/bin/fj_login.sh @@ -65,6 +65,48 @@ check_sops_installed() { fi } +# Función para extraer la URL base de Forgejo de la configuración de git +get_forgejo_url() { + # Intentar obtener URL desde la configuración global de git + local remote_url=$(git config --get remote.origin.url 2>/dev/null) + + # Si no se encuentra en la configuración global, intentar buscar en el directorio actual + if [ -z "$remote_url" ] && [ -d ".git" ]; then + remote_url=$(git config --get remote.origin.url 2>/dev/null) + fi + + # Si aún no tenemos URL, intentar buscar en algún repositorio de $HOME + if [ -z "$remote_url" ]; then + # Buscar repositorios en $HOME que podrían tener remotes de Forgejo + for repo_dir in $(find $HOME -name ".git" -type d -maxdepth 3 2>/dev/null); do + local repo_path=$(dirname "$repo_dir") + cd "$repo_path" + local url=$(git config --get remote.origin.url 2>/dev/null) + if [[ "$url" == *"forgejo"* ]] || [[ "$url" == *"codeberg"* ]] || [[ "$url" == *"gitt.rosero"* ]]; then + remote_url="$url" + break + fi + done + fi + + # Si encontramos una URL, extraer el dominio base + if [ -n "$remote_url" ]; then + # Eliminar protocolo (http:// o https://) + local base_url=$(echo "$remote_url" | sed -E 's|^(https?://)?([^/]+).*|\2|') + + # Si el formato es usuario@dominio, extraer solo el dominio + if [[ "$base_url" == *"@"* ]]; then + base_url=$(echo "$base_url" | cut -d '@' -f2) + fi + + # Añadir protocolo https:// si no está presente + echo "https://$base_url" + else + # Si no se encontró ninguna URL, devolver una cadena vacía + echo "" + fi +} + # Función para iniciar sesión con token login() { # Verificar que el archivo de token encriptado existe @@ -73,27 +115,21 @@ login() { echo "Por favor, ejecute bin/cversadm_token.sh para configurar el token primero." exit 1 fi - - # Crear archivo temporal para el token desencriptado - local temp_file=$(mktemp) - - # Desencriptar el archivo con SOPS - sops --decrypt "${DEVELOPER_DIR}/forgejo.sops.yaml" > "$temp_file" - if [ $? -ne 0 ]; then - rm -f "$temp_file" - echo "Error: No se pudo desencriptar el archivo de token." - exit 1 - fi - - # Extraer el token en base64 del archivo YAML - local token_base64=$(grep "token:" "$temp_file" | cut -d' ' -f2) # Decodificar el token de base64 - local token=$(echo "$token_base64" | base64 --decode) + local token=$(sops -d ${DEVELOPER_DIR}/forgejo.sops.yaml | grep -oP '(?<=token: ).*' | base64 -d) - # Limpiar el archivo temporal - rm -f "$temp_file" + # Obtener la URL base de Forgejo + local forgejo_url=$(get_forgejo_url) + if [ -n "$forgejo_url" ]; then + echo "Usando servidor Forgejo: $forgejo_url" + export BERG_BASE_URL="$forgejo_url" + else + echo "ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo." + echo "Si la autenticación falla, establezca manualmente BERG_BASE_URL." + fi + # Iniciar sesión con berg echo "Iniciando sesión en Forgejo..." berg auth login -t "$token" @@ -134,4 +170,4 @@ main() { } # Ejecutar función principal con los parámetros recibidos -main "$@" \ No newline at end of file +main "$@"