From 397569acbec98c738b94143ba7d324fcaa7aefaf Mon Sep 17 00:00:00 2001 From: "Mauro Rosero P." Date: Sat, 15 Mar 2025 13:02:10 -0500 Subject: [PATCH] =?UTF-8?q?[REMOVED]=20Eliminar=20funci=C3=B3n=20de=20crea?= =?UTF-8?q?ci=C3=B3n=20de=20proyectos=20Forgejo=20en=20developers.lib?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- bin/lib/developers.lib | 175 ----------------------------------------- 1 file changed, 175 deletions(-) diff --git a/bin/lib/developers.lib b/bin/lib/developers.lib index 1824670..883fe44 100644 --- a/bin/lib/developers.lib +++ b/bin/lib/developers.lib @@ -290,178 +290,3 @@ function developer_restore() { } -# Función para crear un proyecto Git en Forgejo -# $1: nombre del proyecto -# $2: descripción del proyecto -# $3: tipo de visibilidad (private/public) [por defecto: private] -# $4: ruta local del proyecto (opcional) -# Return: 0 si se crea correctamente, otro valor en caso de error - local PROJECT_NAME=$1 - local PROJECT_DESC=$2 - local VISIBILITY=${3:-private} # Por defecto private si no se especifica - local PROJECT_PATH=$4 - - # Verificar parámetros obligatorios - if [ -z "$PROJECT_NAME" ] || [ -z "$PROJECT_DESC" ]; then - return 10 # Error: faltan parámetros obligatorios - fi - - # Verificar que el archivo de configuración de Forgejo existe - if [ ! -f "$FORGEJO_CONFIG_FILE" ]; then - mkdir -p "$(dirname "$FORGEJO_CONFIG_FILE")" - # Si el archivo no existe, preguntar por token - if [ -t 0 ]; then # Solo si es terminal interactiva - echo "Archivo de configuración de Forgejo no encontrado." - echo "" - echo "Para generar un token en Forgejo:" - 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 "" - read -p "Ingrese su token de acceso de Forgejo: " FORGEJO_TOKEN - echo "FORGEJO_TOKEN=$FORGEJO_TOKEN" > "$FORGEJO_CONFIG_FILE" - chmod 600 "$FORGEJO_CONFIG_FILE" # Restricción de permisos por seguridad - else - return 11 # Error: no existe configuración y no es interactivo - fi - fi - - # Cargar token de Forgejo - source "$FORGEJO_CONFIG_FILE" - if [ -z "$FORGEJO_TOKEN" ]; then - return 12 # Error: token no disponible - fi - - # Verificar visibilidad válida - if [ "$VISIBILITY" != "private" ] && [ "$VISIBILITY" != "public" ]; then - VISIBILITY="private" # Establecer valor por defecto si es inválido - fi - - # 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 - Con timeout y manejo de errores de conexión - echo "DEBUG: Verificando acceso a la API en: $FORGEJO_API_URL/version" >&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 ${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 - 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 - echo "DEBUG: Enviando solicitud de creación de repositorio..." >&2 - 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"}') - - echo "DEBUG: Respuesta API: $API_RESPONSE" >&2 - - # Verificar respuesta - if echo "$API_RESPONSE" | grep -q "\"id\":[0-9]*"; then - local REPO_URL=$(echo "$API_RESPONSE" | grep -o '"clone_url":"[^"]*"' | cut -d'"' -f4) - - if [ -n "$REPO_URL" ]; then - echo "$REPO_URL" > "$HOME/.developer/${PROJECT_NAME}.repo" - else - # Extraer HTML URL como fallback - REPO_URL=$(echo "$API_RESPONSE" | grep -o '"html_url":"[^"]*"' | head -1 | cut -d'"' -f4) - - if [ -n "$REPO_URL" ]; then - echo "$REPO_URL" > "$HOME/.developer/${PROJECT_NAME}.repo" - else - echo "ERROR: No se pudo extraer la URL del repositorio." >&2 - echo "$API_RESPONSE" > "$HOME/.developer/${PROJECT_NAME}.error" - return 14 - fi - fi - - # Si se proporcionó una ruta local, configurar el repositorio - if [ -n "$PROJECT_PATH" ] && [ -d "$PROJECT_PATH" ]; then - cd "$PROJECT_PATH" - # Verificar si ya es un repositorio git - if [ -d ".git" ]; then - # Añadir el remoto - git remote add origin "$REPO_URL" - git push -u origin main || git push -u origin master - else - # Inicializar el repositorio y hacer primer commit si no existe - git init - git add . - git commit -m "[INIT] Proyecto $PROJECT_NAME" - git remote add origin "$REPO_URL" - git push -u origin main - fi - fi - - return 0 # Éxito - else - # Guardar mensaje de error - echo "$API_RESPONSE" > "$HOME/.developer/${PROJECT_NAME}.error" - return 13 # Error: falló la creación del repositorio - fi -}