wiki: documentacion de la version de escritorio

Cinco paginas: portada, Karvan, llamadas, instalacion y estado. Con captura propia de
la interfaz de escritorio, que es la del proyecto original —menu lateral por grupos—
y no la rejilla de hexagonos del movil.

Mismo aviso que en la wiki de movil: rama experimental, sin afiliacion, con enlace al
repositorio oficial de epsylon y la indicacion de que los fallos se reportan aqui.
Repetido en la cabecera de cada pagina.

Karvan y Llamadas se comparten con la wiki de movil porque el modulo es el mismo; solo
cambia el apartado de permisos, que en escritorio los pide el navegador y no hace
falta envoltorio.

La pagina de instalacion avisa de lo unico que puede destruir algo: ejecutar esta rama
y el Oasis oficial a la vez con la misma identidad parte el registro para siempre.
SITO 2026-08-19 00:40:51 +02:00
parent 568dff529a
commit 8990bfb26c
6 changed files with 315 additions and 1 deletions

85
Home.md

@ -1 +1,84 @@
init # Oasis para escritorio — rama de desarrollo experimental
> # ⚠ ESTO NO ES OASIS OFICIAL
>
> Esta wiki documenta una **rama de desarrollo experimental** mantenida por el
> hacklab, **sin afiliación** con el proyecto original.
>
> ## El Oasis oficial es el de epsylon: https://github.com/epsylon/oasis
>
> Si quieres **usar Oasis de verdad, instala el oficial**. Lo que se documenta aquí
> puede romperse, cambiar de forma incompatible o desaparecer sin aviso. No está
> auditado y no tiene garantía de ninguna clase.
>
> **Los fallos de esta rama se reportan aquí, nunca a epsylon.**
Versión base: **Oasis 0.9.5**. Rama: `PRUEBAS`.
---
## Qué añade respecto al oficial
Una sola cosa, pero grande: **Karvan**, un módulo de salas efímeras con llamadas.
![Oasis de escritorio con el menú lateral](img/01-escritorio-menu.png)
El resto es Oasis 0.9.5 tal cual. La interfaz es la del proyecto original: el menú
lateral por grupos, no la rejilla de hexágonos, que es de la versión para móvil.
| | |
|---|---|
| **[Karvan](Karvan)** | Salas que viven solo en memoria y se autodestruyen |
| **[Llamadas](Llamadas)** | Audio y vídeo sobre WebRTC, sin servidores de terceros |
| **[Instalar](Instalar)** | Igual que el oficial |
| **[Estado](Roadmap)** | Qué funciona y qué no |
---
## Instalación
Exactamente igual que el Oasis oficial:
```sh
cd src/server && npm install
cd ../.. && ./oasis.sh
```
Karvan aparece en el menú lateral, en el grupo de comunicación, junto a los chats. Se
puede apagar desde `/modules` como cualquier otro módulo.
---
## Relación con la versión para móvil
Hay un repositorio hermano, **OASIS_MOBILE**, con la versión de Android: misma base y
mismo módulo Karvan, pero con una interfaz distinta pensada para el pulgar.
El código de Karvan es el mismo en ambos. Lo que cambia es el enganche: aquí un enlace
en el menú lateral siguiendo el patrón del proyecto original, allí una rejilla de
hexágonos.
---
## Cómo está organizado el código
El código propio vive separado de los ficheros del proyecto original:
```
src/models/karvan_model.js las salas y su ciclo de vida
src/views/karvan_view.js la interfaz de la sala
src/backend/fork_routes.js las rutas del módulo
src/backend/turnCredentials.js credenciales efímeras para TURN
src/client/public/js/karvan.js el cliente WebRTC del navegador
src/client/assets/styles/karvan.css los estilos del módulo
```
Sobre los ficheros de upstream solo hay **enganches de una línea**. El motivo:
epsylon publica una versión cada dos a cuatro días, y así cada una se integra sin
arrastrar nada.
---
## Licencia
AGPL-3.0, la misma que el proyecto original.

42
Instalar.md Normal file

@ -0,0 +1,42 @@
# Instalar
> ⚠ Rama experimental, no oficial. El Oasis oficial es
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
Igual que el Oasis oficial, porque es el mismo árbol con un módulo más.
```sh
git clone https://gitea.laenre.net/hacklab/OASIS_LINUX.git
cd OASIS_LINUX/src/server && npm install
cd ../.. && ./oasis.sh
```
Abre `http://localhost:3000`.
## Activar Karvan
Viene activado. Si no lo ves en el menú lateral, míralo en `/modules`.
## Configurar un TURN
Solo si quieres llamadas fuera de tu red local. En `src/configs/oasis-config.json`:
```json
"rtc": {
"stun": ["stun:tu.pub:3478"],
"turn": { "urls": ["turn:tu.pub:3478"], "secret": "<static-auth-secret>", "ttlSec": 3600 },
"relayOnly": false
}
```
De fábrica está vacío: **sin servidores de terceros**. Ver [Llamadas](Llamadas) para
el porqué y para cómo endurecer coturn.
## Si vienes del Oasis oficial
Tu identidad y tus datos están en `~/.ssb` y esta rama los usa igual. Aun así, **haz
copia de seguridad antes de probar**: es una rama experimental.
> ⚠ **No ejecutes esta rama y el Oasis oficial a la vez con la misma identidad.**
> Publicar desde dos sitios con el mismo `secret` **parte tu registro y lo deja
> inservible para siempre**. No es recuperable.

68
Karvan.md Normal file

@ -0,0 +1,68 @@
# Karvan — salas efímeras
> ⚠ Rama experimental, no oficial. El Oasis oficial es
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
Salas de chat que **viven solo en memoria** y se destruyen solas. Nada se escribe en
disco ni en el registro de SSB.
## Cómo funciona
Al crear una sala eliges cuánto vive. A partir de ahí:
- **Se autodestruye por inactividad** (30 minutos por defecto) y **por tiempo
absoluto** (2 horas), lo que ocurra antes. El plazo absoluto no se renueva con la
actividad: la sala muere igual.
- Al vencer, **se borra todo**: mensajes, señales y la lista de miembros.
- Si reinicias Oasis, las salas desaparecen. Es lo correcto: solo existían en memoria.
## Quién puede entrar
**Quien tenga el enlace.** El identificador de la sala son 72 bits al azar y es la
única credencial que existe. No hay lista de miembros ni permisos.
Esto es deliberado —así una sala se comparte pegando un enlace— pero conviene tenerlo
claro: **cualquiera con el enlace entra**, y quien esté dentro puede pasárselo a otro.
Para invitar a un contacto sin pegar el enlace en ningún sitio, el botón de invitación
le manda un **mensaje privado de SSB** con el enlace dentro.
## Límites
Existen para que una sala no pueda tumbar el nodo:
| | |
|---|---|
| Mensajes que se conservan | 250 (los más recientes) |
| Salas a la vez | 100 |
| Miembros por sala | 50 |
| Tamaño de señalización | 16 KiB |
| Texto por mensaje | 2000 caracteres |
## Funciona sin JavaScript
El chat es utilizable **con JavaScript desactivado**: escribir manda un formulario y
la página se recarga sola cada diez segundos para traer los mensajes nuevos.
Con JavaScript activado se añade un canal directo entre navegadores, y entonces los
mensajes llegan al instante sin pasar por el servidor.
## Qué protege y qué no
**Protege**: los mensajes no tocan el disco, no entran en tu registro de SSB y
desaparecen solos. No queda rastro que replicar ni que incautar después.
**No protege**:
- El **servidor ve los mensajes** que pasan por él. Solo el canal directo entre
navegadores queda fuera de su alcance.
- Mientras la sala existe, sus **metadatos existen** en memoria: quién está dentro,
cuándo se creó.
- El **relay entre dispositivos** sí publica mensajes privados de SSB, que **son
permanentes**. Es lo que permite que una sala funcione entre tu móvil y tu
ordenador, pero conviene saberlo: eso ya no es efímero.
- Quien tenga el enlace entra, como se explica arriba.
Karvan sirve para conversaciones que no quieres conservar. **No es una herramienta
contra un adversario que ya controla tu dispositivo o el servidor.**

97
Llamadas.md Normal file

@ -0,0 +1,97 @@
# Llamadas de audio y vídeo
> ⚠ Rama experimental, no oficial. El Oasis oficial es
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
Dentro de una sala de [Karvan](Karvan) hay un botón de llamada. El audio y el vídeo
van **directamente entre los participantes** por WebRTC, cifrados de extremo a extremo
por el propio protocolo.
## Permisos de cámara y micrófono
En escritorio los pide el navegador directamente, la primera vez que inicias una
llamada. No hay nada especial que configurar.
En la versión de Android hizo falta un envoltorio propio para poder concederlos; aquí
no aplica.
## Sin servidores de terceros
Casi todas las aplicaciones con WebRTC traen configurado un servidor STUN público,
normalmente de Google. **Aquí no hay ninguno.**
El motivo: un servidor STUN aprende **la IP pública y el momento exacto de cada
consulta**. Con la configuración habitual, cada llamada le estaría diciendo a Google
que ese usuario está llamando ahora. En un proyecto con esta postura sobre la
privacidad, no se sostiene.
Por defecto solo se usan **candidatos host**: funciona en la misma red local y con
routers domésticos amables. Se prefiere degradar a nada antes que a un tercero.
## Si necesitas atravesar NAT
Con datos móviles o detrás de CGNAT hará falta un servidor TURN. La configuración va
en `oasis-config.json`:
```json
"rtc": {
"stun": ["stun:tu.pub:3478"],
"turn": {
"urls": ["turn:tu.pub:3478"],
"secret": "<el static-auth-secret de tu coturn>",
"ttlSec": 3600
},
"relayOnly": false
}
```
Con `secret` se generan credenciales que **caducan solas** (mecanismo REST de coturn):
no hay usuarios que dar de alta y una credencial filtrada vale una hora.
Con `relayOnly: true` **toda** la media pasa por el TURN, de modo que ningún
participante ve la dirección IP del otro. Cuesta ancho de banda del servidor, pero es
lo que hay que activar si los participantes no deberían conocer sus IPs.
### Si montas el TURN, endurécelo
Un TURN mal configurado es un **relay abierto** hacia la red interna del servidor.
Como mínimo, en `turnserver.conf`:
```
use-auth-secret
static-auth-secret=<32 bytes aleatorios, fichero con permisos 600>
realm=<tu dominio>
fingerprint
no-loopback-peers
no-multicast-peers
denied-peer-ip=10.0.0.0-10.255.255.255
denied-peer-ip=172.16.0.0-172.31.255.255
denied-peer-ip=192.168.0.0-192.168.255.255
denied-peer-ip=169.254.0.0-169.254.255.255
denied-peer-ip=100.64.0.0-100.127.255.255
denied-peer-ip=127.0.0.0-127.255.255.255
denied-peer-ip=<LA IP PÚBLICA DEL PROPIO SERVIDOR>
user-quota=12
total-quota=1200
max-bps=1500000
```
La última línea de `denied-peer-ip` es la que casi todo el mundo olvida:
`no-loopback-peers` impide llegar a `127.0.0.1`, **pero no impide que alguien pida un
relay hacia la IP pública de tu propia máquina** y alcance así tu puerto de SSB o tu
servidor web. Sin esa línea, tu TURN es una puerta a tus propios servicios.
Compruébalo con `turnutils_uclient` contra una IP privada y contra la IP pública del
servidor: **las dos deben fallar**.
## Limitaciones honestas
- **Un participante = un nodo.** Dos pestañas del mismo Oasis comparten identidad y no
se enlazan entre sí. Para probar de verdad hacen falta dos nodos distintos.
- **Sin TURN, con datos móviles casi nunca conectará.** El CGNAT de los operadores lo
impide.
- La señalización pasa por el servidor de la sala: un servidor comprometido podría
colocarse en medio. La media va cifrada extremo a extremo, pero **quien controla la
señalización controla con quién crees que hablas**.

24
Roadmap.md Normal file

@ -0,0 +1,24 @@
# Estado
> ⚠ Rama experimental, no oficial. El Oasis oficial es
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
## Hecho
- Base **Oasis 0.9.5**, al día con el proyecto oficial.
- **[Karvan](Karvan)** con su enlace en el menú lateral, siguiendo el mismo patrón que
el resto de módulos.
- Estilos del módulo en su propia hoja, para que se vea igual con cualquier tema.
- **Sin STUN de terceros**, con configuración para TURN propio.
## Sin empezar
- Poner en marcha un TURN en un pub.
- Varias identidades en el mismo equipo con cambio desde la interfaz.
- Empaquetado `.deb` de esta rama.
## Diferencias con la versión para móvil
La versión de Android lleva además una interfaz propia (hexágonos, barra de accesos
rápidos) y algunos módulos recortados por peso. Aquí no: la interfaz es la del
proyecto original y están todos los módulos.

BIN
img/01-escritorio-menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB