[FIXED] Solucionados problemas de conectividad con la API de Forgejo

- Cambiada URL de API de HTTPS a HTTP por defecto
- Implementada detección automática del protocolo correcto (HTTP/HTTPS)
- Añadido soporte para certificados autofirmados con la opción -k
- Mejor diagnóstico de conectividad con pruebas de puerto 80 y 443
- Información detallada sobre problemas de conexión y respuestas de API
- Salida de depuración enriquecida para facilitar la resolución de problemas

🤖 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:11:34 -05:00
parent ea581b9e8c
commit ebdb28bb93
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
2 changed files with 68 additions and 17 deletions

View file

@ -195,11 +195,27 @@ case $RESULT in
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
# Verificar puertos web abiertos (HTTP y HTTPS)
if nc -z -w 2 "$FORGEJO_HOST" 80 2>/dev/null; then
echo " ✓ Puerto 80 (HTTP) accesible"
echo " Intentando conexión HTTP..."
CURL_OUTPUT=$(mktemp)
curl -s -v -o "$CURL_OUTPUT" --connect-timeout 5 "http://$FORGEJO_HOST/api/v1/version" 2>&1 | grep -i "HTTP\|ssl\|TLS\|error"
cat "$CURL_OUTPUT" 2>/dev/null | head -10
rm -f "$CURL_OUTPUT" 2>/dev/null
fi
if nc -z -w 2 "$FORGEJO_HOST" 443 2>/dev/null; then
echo " ✓ Puerto 443 accesible"
echo " ✓ Puerto 443 (HTTPS) accesible"
echo " Intentando conexión HTTPS segura..."
CURL_OUTPUT=$(mktemp)
curl -s -v -o "$CURL_OUTPUT" --connect-timeout 5 "https://$FORGEJO_HOST/api/v1/version" 2>&1 | grep -i "HTTP\|ssl\|TLS\|error"
echo " Intentando conexión HTTPS ignorando certificado..."
curl -s -v -k -o "$CURL_OUTPUT" --connect-timeout 5 "https://$FORGEJO_HOST/api/v1/version" 2>&1 | grep -i "HTTP\|ssl\|TLS\|error"
cat "$CURL_OUTPUT" 2>/dev/null | head -10
rm -f "$CURL_OUTPUT" 2>/dev/null
else
echo " ✗ Puerto 443 no accesible"
echo " ✗ Puerto 443 (HTTPS) no accesible"
fi
else
echo " ✗ No se puede conectar con el servidor $FORGEJO_HOST"

View file

@ -41,7 +41,7 @@ function devslib_test() {
}
# Configuración global para servicios Git
FORGEJO_API_URL="https://git.rosero.one/api/v1"
FORGEJO_API_URL="http://git.rosero.one/api/v1" # Cambiado a HTTP en lugar de HTTPS
FORGEJO_CONFIG_FILE="$HOME/.developer/forgejo.cfg"
# Set gpg environment
@ -347,26 +347,61 @@ function forgejo_create_project() {
# 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
# 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
# Verificar primero el host base
local BASE_URL=$(echo "$FORGEJO_API_URL" | sed -E 's|https?://([^/]+)/.*|\1|')
if ! ping -c 1 -W 2 "$BASE_URL" >/dev/null 2>&1; then
echo "ERROR: No se puede alcanzar el servidor $BASE_URL" >&2
echo "{\"error\":\"No se puede conectar con el servidor $BASE_URL. Verifique su conexión y la URL.\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
return 13
fi
echo "DEBUG: Verificando puertos alternativos..." >&2
# Prueba conexión HTTP puerto 80 primero
if nc -z -w 2 "$BASE_URL" 80 2>/dev/null; then
echo "DEBUG: Puerto 80 (HTTP) accesible" >&2
# Intenta versión HTTP explícitamente
local HTTP_API_URL=$(echo "$FORGEJO_API_URL" | sed 's|^https://|http://|')
local API_RESPONSE=$(curl -s -v --connect-timeout 5 --max-time 10 "$HTTP_API_URL/version" 2>/tmp/curl_verbose.log || echo "")
if [ -n "$API_RESPONSE" ] && echo "$API_RESPONSE" | grep -q "version"; then
echo "DEBUG: API accesible vía HTTP (puerto 80)" >&2
# Reemplazar URL por HTTP para el resto de la función
FORGEJO_API_URL="$HTTP_API_URL"
else
echo "ERROR: Servidor accesible pero la API no responde correctamente por HTTP" >&2
echo "{\"error\":\"Servidor accesible en puerto 80, pero la API no responde correctamente. Verifique la configuración del servidor.\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
cat /tmp/curl_verbose.log >> "$HOME/.developer/${PROJECT_NAME}.error" 2>/dev/null
return 13
fi
elif nc -z -w 2 "$BASE_URL" 443 2>/dev/null; then
echo "DEBUG: Puerto 443 (HTTPS) accesible, pero posibles problemas con certificado o API" >&2
# Intenta con HTTPS pero ignorando errores de certificado
local API_RESPONSE=$(curl -s -v -k --connect-timeout 5 --max-time 10 "$FORGEJO_API_URL/version" 2>/tmp/curl_verbose.log || echo "")
if [ -n "$API_RESPONSE" ] && echo "$API_RESPONSE" | grep -q "version"; then
echo "DEBUG: API accesible vía HTTPS inseguro (ignorando certificado)" >&2
# Continuar pero usando -k para ignorar certificados
export FORGEJO_CURL_OPTS="-k"
else
echo "ERROR: Servidor HTTPS accesible pero la API no responde correctamente" >&2
echo "{\"error\":\"Servidor accesible en puerto 443, pero la API no responde. Posibles problemas de certificado o configuración.\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
cat /tmp/curl_verbose.log >> "$HOME/.developer/${PROJECT_NAME}.error" 2>/dev/null
return 13
fi
else
echo "ERROR: No se puede acceder a los puertos HTTP (80) ni HTTPS (443) en $BASE_URL" >&2
echo "{\"error\":\"Servidor accesible por ping pero no responde en los puertos web (80/443).\"}" > "$HOME/.developer/${PROJECT_NAME}.error"
return 13
fi
# 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")
local TOKEN_CHECK=$(curl ${FORGEJO_CURL_OPTS:-} -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" == "401" ]; then
echo "ERROR: Token inválido o sin permisos suficientes. Código: 401" >&2
@ -383,7 +418,7 @@ function forgejo_create_project() {
# Llamar a la API de Forgejo para crear el repositorio
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" \
local API_RESPONSE=$(curl ${FORGEJO_CURL_OPTS:-} -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 || echo '{"error":"Falló la comunicación con el servidor"}')