Newer
Older
Sunfish / AGENTS.md
@Ivan Dominguez Ivan Dominguez 21 hours ago 4 KB 3.0

Sunfish — AGENTS.md

Servidor web y de ficheros ligero y portable. Publica carpetas a la vez por web (HTML4 apto para navegadores de los 90), FTP y WebDAV, para mover ficheros entre equipos modernos y máquinas muy antiguas en redes de confianza. La versión 3 es una reescritura completa de la 2.0.

Decisiones tomadas

  • C# / .NET 10. Toda la lógica en src/Sunfish.Core (compatible con AOT); aplicaciones finas encima. Ver DOC/ARQUITECTURA.md.
  • Dos ejecutables:
    • Sunfish.exe (WinForms, Windows): un solo .exe (PublishSingleFile), porque WinForms no admite AOT.
    • sunfish-cli (TUI/consola, Windows/Linux/macOS): Native AOT.
    • Más adelante, interfaces GTK y macOS sobre el mismo Core.
  • Motor HTTP propio sobre Socket (ni HttpListener ni Kestrel): sin administrador, tolerante con clientes antiguos, permite AOT.
    • En este proyecto se publica con AOT aunque sea un servidor web: la excepción general para servidores web no aplica porque no se usa ASP.NET.
  • Un share = carpeta + location, servida a la vez por web, FTP y WebDAV.
    • Gana la location más específica (por segmentos, como las locations de prefijo de nginx).
    • Si hay índice se sirve; si no, navegador de directorios. ?$list fuerza el navegador aunque haya índice. Ver DOC/SHARES-Y-RUTAS.md.
  • Web en modo clásico (HTML 3.2/4.01, sin JS, ISO-8859-1 con entidades, GIF, fuente sin serifa) y modo moderno como mejora progresiva. Subidas por formulario multipart. Ver DOC/WEB.md.
  • Clientes de destino: DOS, Windows 3.1, 9x, Mac clásico y modernos. Adaptación automática por perfil de cliente (User-Agent, o sufijo +dos/+mac en el usuario FTP): alias 8.3 estables, MacBinary, juegos de caracteres. Ver DOC/CLIENTES.md.
  • FTP activo/pasivo con juegos de caracteres antiguos; WebDAV clase 1 + LOCK simulado, activo por defecto. Ver DOC/FTP-Y-WEBDAV.md.
  • Mac clásico transparente: MacBinary/BinHex se decodifican al subir (detección por CRC) y los forks se guardan como AppleDouble (._). Mac = false lo desactiva en un share. Ver DOC/MAC-CLASICO.md.
  • De Sunfish a Sunfish: por WebDAV (cliente en Core) con descubrimiento DNS-SD; sin protocolo propio.
  • TUI con el icono del pez luna en medios bloques cuando el terminal es lo bastante grande.
  • Panel de administración web con contraseña, desactivado por defecto.
  • Sin TLS a propósito. Se eliminan la ejecución en el servidor, compartir pantalla, los plugins y el requisito de administrador. Ver DOC/SEGURIDAD.md y DOC/LEGACY-2.0.md.
  • Configuración en INI (sunfish.conf, claves en inglés), con importación de la 2.0. Textos en español e inglés (SUNFISH_LANG).

Estado

  • Fases 1 a 7 hechas (todas las previstas): Sunfish.Core (configuración INI con recarga en caliente, shares/locations, validación de rutas, motor HTTP propio, web con perfiles de cliente, subidas, carpetas, renombrar, borrar, anti-CSRF, HTTP Basic, ZIP en flujo, servidor FTP, WebDAV, cliente WebDAV, DNS-SD, Mac clásico con MacBinary/BinHex/AppleDouble, alias 8.3, panel de administración web, importación de la 2.0, QR), sunfish-cli (TUI con pestaña Explorar y QR, serve, modo rápido, share, user, admin, import-v2) y Sunfish.exe (WinForms, con ventanas Explorar, QR y panel web). Scripts build.* y run.*. dotnet test pasa (252 pruebas). Lo que falta en DOC/COMPILACION-Y-PRUEBAS.md.
  • El panel web (Web/WebAdmin.cs) usa el SunfishHost que recibe WebApp; no cambia el HTTP (reiniciarlo cortaría la propia petición).
  • SunfishHost arranca y para HTTP y FTP por separado (Server.Http / Server.Ftp) y les da el mismo Authenticator (bloqueo por intentos compartido).
  • Las aplicaciones editan una copia (SunfishConfig.Clone) y la aplican con SunfishHost.SaveAndApplyAsync; las validaciones compartidas están en Config/ShareSettings.cs.
  • Operaciones de disco comunes (para web, FTP y WebDAV) en Shares/FileOperations.cs.
  • El código de la 2.0 se retiró del árbol; queda en la etiqueta 2.0. El arte original está en art/.
  • Remoto actual privado, rama master. El README ya apunta a GitHub (rama main) para cuando se publique allí.
  • Decisiones pendientes listadas en DOC/README.md.

Compilar

dotnet build, dotnet test, run.cmd (GUI), run-cli.cmd / run.sh (consola). build.ps1 compila Sunfish.exe (autocontenido; SUNFISH_LIGHT=1 para el ligero) y sunfish-cli.exe en Windows; build.sh, sunfish-cli en Linux/macOS. Ver DOC/COMPILACION-Y-PRUEBAS.md.