# Sunfish 2.0: qué había y qué se hace con ello

La 2.0 (2021) es una aplicación WinForms sobre .NET Framework 4.5, con `HttpListener`. Su código
sigue en el repositorio (`Sunfish/`, `Sunfish Test Plugin/`, `Sunfish.sln`,
`Sunfish Test Plugin.sln`) **hasta que empiece la reescritura**. Entonces se eliminará: queda en
la historia de git (conviene marcar antes ese punto con una etiqueta, p. ej. `v2.0`).

Capturas de la 2.0: [main.png](main.png), [editor.png](editor.png).

## Funciones y destino

| 2.0 | En la 3 |
|---|---|
| Servicio `WebService`: carpeta, documento por defecto, listado, solo lectura, borrar | **Se mantiene** como *share*, con permisos más finos |
| Ejecutar ficheros en el servidor | **Se elimina** |
| Compartir pantalla (`_OLD_/RemoteScreen.cs`) | **Se elimina** |
| Menú raíz con la lista de servicios | **Se mantiene** (`RootMenu`) |
| *Locations* con prioridad de la más específica | **Se mantiene**, comparando por segmentos completos |
| Autodescarga del ejecutable (`/$sunfish/Sunfish.exe`) | **Se mantiene** (`/$sunfish/download`) |
| Descarga de carpeta en ZIP (vía fichero temporal) | **Se mantiene**, en flujo y compatible con descompresores antiguos |
| Subida por trozos con `PUT` y `X-Sunfish-Offset` | **Se mantiene** en el modo moderno; el clásico usa formularios |
| Iconos del shell de Windows y miniaturas con `System.Drawing` | **Se elimina** (solo Windows y no compatible con AOT); iconos GIF por tipo |
| Plantillas propias con reflexión (`Templater`) | **Se sustituye** por generación sin reflexión |
| Recursos `$sunfish` "sellados" al final del `.exe` | **Se sustituye** por recursos incrustados |
| Fuentes e iconos de Google Fonts | **Se elimina** (no funciona sin Internet) |
| Plugins `sf-*.dll` cargados por reflexión | **Se elimina** |
| Panel de administración con contraseña (sin terminar) | **Se implementa**, con hash y `AllowFrom` |
| `konsole.js` (consola de depuración en la página) | **Se elimina** |
| Lista de IP y copiar URL por interfaz | **Se mantiene**, con QR |
| Arrastrar carpetas a la ventana para compartirlas | **Se mantiene**; además, arrastrar sobre el ejecutable |
| Reglas del cortafuegos de Windows (sin usar) | Pendiente (ver [APLICACIONES.md](APLICACIONES.md)) |
| Configuración JSON `sunfish2` | INI `sunfish.conf`, con importación de la 2.0 |
| Requiere administrador (`requireAdministrator`) | **No** |
| `uHttp.cs` (restos de otro proyecto) | Se elimina |

Los fallos de seguridad de la 2.0 y su corrección están en [SEGURIDAD.md](SEGURIDAD.md).

## Lo que se aprovecha

- **`MimeTypes.cs`:** la tabla de extensiones y tipos MIME.
- **El logotipo y el icono de carpeta** de `$sunfish/`, convertidos a GIF.
- **La lógica de las *locations*** (`GetServiceForPath`).
