From ea581b9e8cc981983c7194a32ee4a87db09c9ab6 Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Thu, 13 Mar 2025 12:08:13 -0500 Subject: [PATCH] =?UTF-8?q?[FIXED]=20Corregida=20URL=20de=20API=20y=20mejo?= =?UTF-8?q?rado=20diagn=C3=B3stico=20de=20conectividad=20para=20Forgejo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Actualizada URL de API a git.rosero.one - Añadidos timeouts en las peticiones curl para evitar bloqueos - Mejorado diagnóstico de conectividad con verificación de DNS y puertos - Mejor extracción de URL base del servidor - Detección más precisa de problemas de conexión vs. problemas de autenticación 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/forgejo_project.sh | 20 +++++++++++++++--- bin/lib/developers.lib | 46 +++++++++++++++++++++++++++++++----------- 2 files changed, 51 insertions(+), 15 deletions(-) diff --git a/bin/forgejo_project.sh b/bin/forgejo_project.sh index 0444180..8c846c8 100755 --- a/bin/forgejo_project.sh +++ b/bin/forgejo_project.sh @@ -169,7 +169,8 @@ case $RESULT in echo "" echo "Para generar un nuevo token en Forgejo:" - echo "1. Inicie sesión en $FORGEJO_API_URL (sin '/api/v1')" + FORGEJO_BASE_URL=$(echo "$FORGEJO_API_URL" | sed -E 's|/api/v1||') + echo "1. Inicie sesión en $FORGEJO_BASE_URL" echo "2. Vaya a Configuración → Aplicaciones" echo "3. Genere un nuevo token de acceso personal" echo "4. Asegúrese de darle permisos de lectura/escritura para repositorios" @@ -190,8 +191,21 @@ case $RESULT in # Verificar conectividad echo "✓ Probando conectividad con Forgejo..." - FORGEJO_HOST=$(echo "$FORGEJO_API_URL" | sed 's|^https\?://||' | cut -d'/' -f1) - ping -c 1 "$FORGEJO_HOST" > /dev/null 2>&1 && echo " ✓ Conectividad OK" || echo " ✗ No se puede conectar con el servidor" + FORGEJO_HOST=$(echo "$FORGEJO_API_URL" | sed -E 's|https?://([^/]+)/.*|\1|') + if ping -c 1 -W 2 "$FORGEJO_HOST" > /dev/null 2>&1; then + echo " ✓ Conectividad básica OK" + echo " ℹ Comprobando servicio en puerto 443..." + # Verificar puerto HTTPS abierto + if nc -z -w 2 "$FORGEJO_HOST" 443 2>/dev/null; then + echo " ✓ Puerto 443 accesible" + else + echo " ✗ Puerto 443 no accesible" + fi + else + echo " ✗ No se puede conectar con el servidor $FORGEJO_HOST" + echo " ℹ Comprobando posible problema de DNS..." + host "$FORGEJO_HOST" 2>/dev/null && echo " ✓ Resolución DNS OK" || echo " ✗ Problema de resolución DNS" + fi # Verificar errores de curl if [ -f "/tmp/curl_error.log" ]; then diff --git a/bin/lib/developers.lib b/bin/lib/developers.lib index 388fa1e..fab2ff6 100644 --- a/bin/lib/developers.lib +++ b/bin/lib/developers.lib @@ -41,7 +41,7 @@ function devslib_test() { } # Configuración global para servicios Git -FORGEJO_API_URL="https://forgejo.rosero.one/api/v1" +FORGEJO_API_URL="https://git.rosero.one/api/v1" FORGEJO_CONFIG_FILE="$HOME/.developer/forgejo.cfg" # Set gpg environment @@ -318,7 +318,8 @@ function forgejo_create_project() { echo "Archivo de configuración de Forgejo no encontrado." echo "" echo "Para generar un token en Forgejo:" - echo "1. Inicie sesión en $FORGEJO_API_URL (sin '/api/v1')" + local FORGEJO_BASE_URL=$(echo "$FORGEJO_API_URL" | sed -E 's|/api/v1||') + echo "1. Inicie sesión en $FORGEJO_BASE_URL" echo "2. Vaya a Configuración → Aplicaciones" echo "3. Genere un nuevo token de acceso personal con permisos de 'repo'" echo "" @@ -344,27 +345,48 @@ function forgejo_create_project() { # Preparar datos para la API local API_DATA="{\"name\":\"$PROJECT_NAME\",\"description\":\"$PROJECT_DESC\",\"private\":$([ "$VISIBILITY" == "private" ] && echo "true" || echo "false")}" - # Comprobar si podemos acceder a la API - local API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$FORGEJO_API_URL/version") + # Comprobar si podemos acceder a la API - Con timeout y manejo de errores de conexión + echo "DEBUG: Verificando acceso a la API en: $FORGEJO_API_URL/version" >&2 + local API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 "$FORGEJO_API_URL/version" 2>/dev/null || echo "000") if [ "$API_STATUS" != "200" ]; then - echo "ERROR: No se puede acceder a la API de Forgejo. Código de estado: $API_STATUS" >&2 - echo "{\"error\":\"No se puede acceder a la API. Código: $API_STATUS\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + # Intentar extraer el host base para diagnóstico + local BASE_URL=$(echo "$FORGEJO_API_URL" | sed -E 's|https?://([^/]+)/.*|\1|') + echo "ERROR: No se puede acceder a la API de Forgejo en $BASE_URL. Código: $API_STATUS" >&2 + + # Verificar conectividad básica al host + if ping -c 1 -W 2 "$BASE_URL" >/dev/null 2>&1; then + echo "DEBUG: Conectividad básica OK, pero el servicio API no responde correctamente" >&2 + echo "{\"error\":\"Servidor accesible pero la API no responde. Código: $API_STATUS\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + else + echo "DEBUG: No hay conectividad básica con el servidor" >&2 + echo "{\"error\":\"No se puede conectar con el servidor $BASE_URL. Verifique su conexión y la URL.\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + fi return 13 fi - # Verificar token - local TOKEN_CHECK=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_API_URL/user") + # Verificar token con timeout y manejo de errores + echo "DEBUG: Verificando token con API en: $FORGEJO_API_URL/user" >&2 + local TOKEN_CHECK=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_API_URL/user" 2>/dev/null || echo "000") if [ "$TOKEN_CHECK" != "200" ]; then - echo "ERROR: Token inválido o sin acceso. Código de estado: $TOKEN_CHECK" >&2 - echo "{\"error\":\"Token inválido o sin acceso. Código: $TOKEN_CHECK\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + if [ "$TOKEN_CHECK" == "401" ]; then + echo "ERROR: Token inválido o sin permisos suficientes. Código: 401" >&2 + echo "{\"error\":\"Token inválido o sin permisos suficientes. Genere un nuevo token con permisos 'repo'\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + elif [ "$TOKEN_CHECK" == "000" ]; then + echo "ERROR: No se pudo verificar el token. Error de conectividad" >&2 + echo "{\"error\":\"No se pudo verificar el token. Error de conectividad con el servidor\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + else + echo "ERROR: Token inválido o sin acceso. Código: $TOKEN_CHECK" >&2 + echo "{\"error\":\"Token inválido o sin acceso. Código: $TOKEN_CHECK\"}" > "$HOME/.developer/${PROJECT_NAME}.error" + fi return 12 fi # Llamar a la API de Forgejo para crear el repositorio - local API_RESPONSE=$(curl -s -X POST "$FORGEJO_API_URL/user/repos" \ + echo "DEBUG: Enviando solicitud de creación de repositorio..." >&2 + local API_RESPONSE=$(curl -s -X POST --connect-timeout 10 --max-time 30 "$FORGEJO_API_URL/user/repos" \ -H "Authorization: token $FORGEJO_TOKEN" \ -H "Content-Type: application/json" \ - -d "$API_DATA" 2>/tmp/curl_error.log) + -d "$API_DATA" 2>/tmp/curl_error.log || echo '{"error":"Falló la comunicación con el servidor"}') echo "DEBUG: Respuesta API: $API_RESPONSE" >&2