# Documentación técnica de Sunfish

Punto de entrada para desarrolladores y agentes de IA. Para el uso como usuario, ver el
[README principal](../README.md). El resumen de decisiones y estado que leen los agentes de IA
está en [AGENTS.md](../AGENTS.md).

## Qué es Sunfish

Servidor web y de ficheros ligero y portable, en C# (.NET 10). Publica carpetas del disco a la
vez por **web** (con un navegador de directorios en HTML4 que funciona en navegadores de los
90), **FTP** y, opcionalmente, **WebDAV**. Su uso principal es mover ficheros entre equipos
modernos y **máquinas muy antiguas** (Windows 95, Mac clásico) en una red de confianza. La
versión 3 es una reescritura completa de la 2.0.

## Índice

| Documento | Contenido |
|---|---|
| [ARQUITECTURA.md](ARQUITECTURA.md) | Biblioteca común y aplicaciones, estructura del repo, publicación, módulos, AOT |
| [SHARES-Y-RUTAS.md](SHARES-Y-RUTAS.md) | El share, *locations* por prefijo más largo, validación de rutas, permisos, configuración, importación de la 2.0 |
| [WEB.md](WEB.md) | Motor HTTP propio, interfaz clásica/moderna, juegos de caracteres, subidas, ZIP, panel de administración |
| [FTP-Y-WEBDAV.md](FTP-Y-WEBDAV.md) | Servidor FTP (activo/pasivo, comandos, juegos de caracteres) y WebDAV |
| [MAC-CLASICO.md](MAC-CLASICO.md) | MacBinary, BinHex y AppleDouble para no perder *resource forks* |
| [SEGURIDAD.md](SEGURIDAD.md) | Alcance (en claro, redes de confianza) y medidas de protección del servidor |
| [APLICACIONES.md](APLICACIONES.md) | `Sunfish.exe` (WinForms), `sunfish-cli` (TUI/consola), futuras GTK y macOS |
| [COMPILACION-Y-PRUEBAS.md](COMPILACION-Y-PRUEBAS.md) | Estado, publicación, requisitos, scripts y pruebas previstas |
| [LEGACY-2.0.md](LEGACY-2.0.md) | Qué tenía la 2.0 y qué se mantiene, cambia o elimina |

## Hechos clave (leer antes de tocar nada)

- **Fase de diseño:** solo documentación. El código de la carpeta `Sunfish/` es la 2.0 (.NET
  Framework 4.5) y **no se porta**: se reescribe.
- **Toda la lógica** va en `Sunfish.Core` (compatible con Native AOT); las aplicaciones solo son
  interfaz.
- **Motor HTTP propio sobre `Socket`:** ni `HttpListener` (exige administrador) ni Kestrel (es
  estricto con clientes antiguos y no permite AOT).
- **Web, FTP y WebDAV** sirven el mismo árbol de shares; gana la *location* más específica.
- **Modo clásico** de la web: HTML 3.2/4.01, sin JavaScript, ISO-8859-1 con entidades, iconos
  GIF.
- **En claro y sin TLS**, a propósito; nunca se requiere administrador; nunca se ejecuta nada en
  el servidor.
- **Textos de usuario** en español e inglés; claves del fichero de configuración en inglés.

## Decisiones pendientes

Recogidas con la marca **pendiente** en cada documento. Las principales:

- Variante por defecto de `Sunfish.exe` (autocontenida o dependiente del framework): medir
  tamaños.
- `build.ps1` sin herramientas de C++: ¿fallar o compilar solo la GUI?
- Permisos por usuario dentro de un share.
- Juego de caracteres de FTP y de formularios por cliente (en vez de global).
- Entradas virtuales `.bin` en FTP; conservar los `.bin`/`.hqx` originales al subir.
- Regla del cortafuegos de Windows desde la GUI; servicio de Windows para `sunfish-cli`.
- Bindings para las interfaces GTK y macOS.
