diff --git a/bin/forgejo_project.sh b/bin/forgejo_project.sh index 8c846c8..5a1707f 100755 --- a/bin/forgejo_project.sh +++ b/bin/forgejo_project.sh @@ -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" diff --git a/bin/lib/developers.lib b/bin/lib/developers.lib index fab2ff6..d3c8f27 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://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 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 - # 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" + # 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 "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" + 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"}')