[FIXED] Corregida URL de API y mejorado diagnóstico de conectividad para Forgejo

- 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 <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-03-13 12:08:13 -05:00
parent 46d3be29ed
commit ea581b9e8c
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
2 changed files with 51 additions and 15 deletions

View file

@ -169,7 +169,8 @@ case $RESULT in
echo "" echo ""
echo "Para generar un nuevo token en Forgejo:" 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 "2. Vaya a Configuración → Aplicaciones"
echo "3. Genere un nuevo token de acceso personal" echo "3. Genere un nuevo token de acceso personal"
echo "4. Asegúrese de darle permisos de lectura/escritura para repositorios" echo "4. Asegúrese de darle permisos de lectura/escritura para repositorios"
@ -190,8 +191,21 @@ case $RESULT in
# Verificar conectividad # Verificar conectividad
echo "✓ Probando conectividad con Forgejo..." echo "✓ Probando conectividad con Forgejo..."
FORGEJO_HOST=$(echo "$FORGEJO_API_URL" | sed 's|^https\?://||' | cut -d'/' -f1) FORGEJO_HOST=$(echo "$FORGEJO_API_URL" | sed -E 's|https?://([^/]+)/.*|\1|')
ping -c 1 "$FORGEJO_HOST" > /dev/null 2>&1 && echo " ✓ Conectividad OK" || echo " ✗ No se puede conectar con el servidor" 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 # Verificar errores de curl
if [ -f "/tmp/curl_error.log" ]; then if [ -f "/tmp/curl_error.log" ]; then

View file

@ -41,7 +41,7 @@ function devslib_test() {
} }
# Configuración global para servicios Git # 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" FORGEJO_CONFIG_FILE="$HOME/.developer/forgejo.cfg"
# Set gpg environment # Set gpg environment
@ -318,7 +318,8 @@ function forgejo_create_project() {
echo "Archivo de configuración de Forgejo no encontrado." echo "Archivo de configuración de Forgejo no encontrado."
echo "" echo ""
echo "Para generar un token en Forgejo:" 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 "2. Vaya a Configuración → Aplicaciones"
echo "3. Genere un nuevo token de acceso personal con permisos de 'repo'" echo "3. Genere un nuevo token de acceso personal con permisos de 'repo'"
echo "" echo ""
@ -344,27 +345,48 @@ function forgejo_create_project() {
# Preparar datos para la API # Preparar datos para la API
local API_DATA="{\"name\":\"$PROJECT_NAME\",\"description\":\"$PROJECT_DESC\",\"private\":$([ "$VISIBILITY" == "private" ] && echo "true" || echo "false")}" local API_DATA="{\"name\":\"$PROJECT_NAME\",\"description\":\"$PROJECT_DESC\",\"private\":$([ "$VISIBILITY" == "private" ] && echo "true" || echo "false")}"
# Comprobar si podemos acceder a la API # Comprobar si podemos acceder a la API - Con timeout y manejo de errores de conexión
local API_STATUS=$(curl -s -o /dev/null -w "%{http_code}" "$FORGEJO_API_URL/version") 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 if [ "$API_STATUS" != "200" ]; then
echo "ERROR: No se puede acceder a la API de Forgejo. Código de estado: $API_STATUS" >&2 # Intentar extraer el host base para diagnóstico
echo "{\"error\":\"No se puede acceder a la API. Código: $API_STATUS\"}" > "$HOME/.developer/${PROJECT_NAME}.error" 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 return 13
fi fi
# Verificar token # Verificar token con timeout y manejo de errores
local TOKEN_CHECK=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_API_URL/user") 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 if [ "$TOKEN_CHECK" != "200" ]; then
echo "ERROR: Token inválido o sin acceso. Código de estado: $TOKEN_CHECK" >&2 if [ "$TOKEN_CHECK" == "401" ]; then
echo "{\"error\":\"Token inválido o sin acceso. Código: $TOKEN_CHECK\"}" > "$HOME/.developer/${PROJECT_NAME}.error" 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 return 12
fi fi
# Llamar a la API de Forgejo para crear el repositorio # 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 "Authorization: token $FORGEJO_TOKEN" \
-H "Content-Type: application/json" \ -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 echo "DEBUG: Respuesta API: $API_RESPONSE" >&2