wiki: documentacion de la rama, con aviso de que no es Oasis oficial
Siete paginas: portada, Karvan, llamadas, interfaz, como compilar la APK, que NO tiene y hoja de ruta. Con capturas propias tomadas de esta build a 412x915. El aviso de rama experimental va arriba de la portada y repetido en la cabecera de cada pagina, porque la gente entra por enlaces directos y no siempre por el indice. Con enlace al repositorio oficial de epsylon y la indicacion de que los fallos de esta rama se reportan aqui, no a el. La pagina de limitaciones dice lo que falla sin adornos: que en movil no se eliminan los metadatos EXIF de las fotos —con la ubicacion dentro—, que el DNS va a Google y Cloudflare, que la contrasena de la copia de seguridad viaja en la URL, y que el envoltorio de Android compila pero todavia no se ha probado en un movil.
87
Compilar.md
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
# Compilar la APK
|
||||
|
||||
> ⚠ Rama experimental, no oficial. El Oasis oficial es
|
||||
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
|
||||
|
||||
La APK se construye con un **proyecto Gradle propio**, en `android/`. Ya no se parte
|
||||
del APK oficial como molde.
|
||||
|
||||
## Qué se reutiliza y qué es nuevo
|
||||
|
||||
Tres bibliotecas nativas se toman tal cual del APK existente:
|
||||
|
||||
| Fichero | Qué es |
|
||||
|---|---|
|
||||
| `libnode.so` | **nodejs-mobile v18.20.4 oficial** (OpenSSL 3.0.13+quic). Artefacto público: no hay que compilar Node |
|
||||
| `libnative-lib.so` | 6,8 KB. Un solo símbolo JNI que arranca Node |
|
||||
| `libc++_shared.so` | Runtime de C++ |
|
||||
|
||||
Por eso el `namespace` del módulo es `com.solarnethub.oasis`: JNI resuelve por nombre
|
||||
y la clase puente tiene que vivir en ese paquete. El identificador de la aplicación sí
|
||||
es propio, `net.laenre.oasis`, y por eso se instala junto a la oficial.
|
||||
|
||||
**No hace falta el NDK.**
|
||||
|
||||
## Pasos
|
||||
|
||||
```sh
|
||||
# 1. bibliotecas nativas y empaquetado del backend
|
||||
cd android
|
||||
./scripts/prepare.sh ../../oasis_mobile # o la ruta de un APK
|
||||
|
||||
# 2. compilar
|
||||
./gradlew assembleDebug # o assembleRelease para firmar
|
||||
```
|
||||
|
||||
### De dónde sale `node_modules`
|
||||
|
||||
Esto no es obvio y es donde se atasca cualquiera que lo intente.
|
||||
|
||||
El `node_modules` del móvil **no es el que produce un `npm install` normal**: son unos
|
||||
137 MB podados y **sin un solo binario nativo**, frente a 1,4 GB con 35 binarios de
|
||||
una instalación de escritorio. Por eso el arranque fuerza criptografía en JavaScript
|
||||
puro.
|
||||
|
||||
`prepare.sh` lo saca del APK base y sustituye solo el código. Es seguro porque las 98
|
||||
dependencias son idénticas entre versiones.
|
||||
|
||||
Si algún día lo rellenas con un `npm install` normal, la APK se llevará binarios de
|
||||
Linux de escritorio que en Android no sirven, y pesará diez veces más.
|
||||
|
||||
## Firmar
|
||||
|
||||
La contraseña **nunca** en el repositorio ni en `gradle.properties`:
|
||||
|
||||
```sh
|
||||
export OASIS_KEYSTORE=/ruta/oasis-alfa-key.jks
|
||||
export OASIS_KEYSTORE_PASS=...
|
||||
export OASIS_KEY_ALIAS=oasis
|
||||
./gradlew assembleRelease
|
||||
```
|
||||
|
||||
Y comprobar siempre antes de publicar:
|
||||
|
||||
```sh
|
||||
apksigner verify --print-certs app-release.apk
|
||||
unzip -l app-release.apk | grep nodejs-project.zip # debe pesar más de 20 MB
|
||||
aapt dump permissions app-release.apk | grep -E "CAMERA|RECORD_AUDIO"
|
||||
```
|
||||
|
||||
La segunda línea importa: si el backend no se empaquetó bien, la APK compila,
|
||||
instala y arranca **sin Oasis dentro**.
|
||||
|
||||
## Requisitos
|
||||
|
||||
JDK 17 o superior **con compilador**. Ojo: el OpenJDK de algunas distribuciones es
|
||||
solo runtime y no trae `javac`; el proyecto apunta al JDK que trae Android Studio.
|
||||
|
||||
## Mejoras del envoltorio propio
|
||||
|
||||
- `targetSdk 35`.
|
||||
- Tráfico sin cifrar permitido **solo hacia el propio dispositivo**, en vez de
|
||||
permitido en general.
|
||||
- Copia de seguridad de Android **desactivada**: `adb backup` ya no puede sacar tu
|
||||
identidad de SSB.
|
||||
- El backend corre como servicio en primer plano, así que **sobrevive en segundo
|
||||
plano**. Antes se declaraba el permiso pero no había servicio, y el backend moría al
|
||||
salir de la app.
|
||||
72
Home.md
|
|
@ -1 +1,71 @@
|
|||
prueba
|
||||
# Oasis Mobile — 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é es esto
|
||||
|
||||
Una rama que sigue de cerca las versiones de epsylon y añade dos cosas: una interfaz
|
||||
pensada para el móvil y un módulo de **salas efímeras con llamadas**.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| **[Karvan](Karvan)** | Salas que viven solo en memoria y se autodestruyen |
|
||||
| **[Llamadas](Llamadas)** | Audio y vídeo sobre WebRTC, sin servidores de terceros |
|
||||
| **[La interfaz](Interfaz)** | Hexágonos, barra de accesos rápidos y por qué son así |
|
||||
| **[Compilar la APK](Compilar)** | Cómo se construye, de dónde sale cada pieza |
|
||||
| **[Estado y hoja de ruta](Roadmap)** | Qué funciona, qué no, y qué está bloqueado |
|
||||
| **[Qué NO tiene](Limitaciones)** | Lo que falta respecto al oficial, sin adornos |
|
||||
|
||||
---
|
||||
|
||||
## La interfaz
|
||||
|
||||

|
||||
|
||||
La navegación es una rejilla de hexágonos por categorías, con una barra de accesos
|
||||
rápidos abajo que el usuario configura, y arriba los filtros Personal y Community.
|
||||
|
||||
---
|
||||
|
||||
## Cómo se instala
|
||||
|
||||
La APK **no está en ninguna tienda**. Se descarga de las *releases* de este
|
||||
repositorio y se instala a mano, con "orígenes desconocidos" activado.
|
||||
|
||||
Se instala **junto al Oasis oficial** sin pisarlo: el identificador de aplicación es
|
||||
`net.laenre.oasis`, distinto del oficial. Puedes tener los dos y comparar.
|
||||
|
||||
> **Verifica siempre la huella de la firma** antes de instalar una APK descargada de
|
||||
> un servidor propio. La huella de cada versión se publica en su release.
|
||||
|
||||
---
|
||||
|
||||
## Aviso sobre privacidad
|
||||
|
||||
Esta rama **no elimina los metadatos EXIF** de las imágenes que subes desde el móvil,
|
||||
**incluida la ubicación GPS** si la cámara la guarda. El limpiador de metadatos del
|
||||
código depende de una biblioteca que no se empaqueta en Android.
|
||||
|
||||
Hasta que se resuelva: **quita la ubicación de las fotos antes de subirlas**, o
|
||||
desactiva el guardado de ubicación en la cámara. Ver [Limitaciones](Limitaciones).
|
||||
|
||||
---
|
||||
|
||||
## Licencia
|
||||
|
||||
AGPL-3.0, la misma que el proyecto original.
|
||||
|
|
|
|||
61
Interfaz.md
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
# La interfaz
|
||||
|
||||
> ⚠ Rama experimental, no oficial. El Oasis oficial es
|
||||
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
|
||||
|
||||
Es la diferencia más visible con el Oasis oficial. Está pensada para el pulgar, no
|
||||
para el ratón.
|
||||
|
||||
## La pantalla principal
|
||||
|
||||

|
||||
|
||||
Tres piezas:
|
||||
|
||||
- **Arriba**: logo, los filtros **Personal** y **Community**, y tu avatar.
|
||||
- **En medio**: la rejilla de **hexágonos**, diez categorías que se despliegan al
|
||||
tocarlas. Las categorías son puro CSS: funcionan sin JavaScript.
|
||||
- **Abajo**: la **barra de accesos rápidos**, configurable.
|
||||
|
||||
## Los filtros Personal y Community
|
||||
|
||||

|
||||
|
||||
Parten las diez categorías en dos mitades de cinco, para no tener que buscar entre
|
||||
todas. Sin filtro se ven las diez.
|
||||
|
||||
## La barra de accesos rápidos
|
||||
|
||||

|
||||
|
||||
Cuatro atajos que eliges tú, más un par fijo a la derecha. Se configuran con el lápiz.
|
||||
|
||||
## Módulos
|
||||
|
||||

|
||||
|
||||
Cada módulo se enciende y se apaga por separado, igual que en el Oasis oficial.
|
||||
|
||||
## Por qué la interfaz vive aparte
|
||||
|
||||
Todo esto está en ficheros propios (`src/views/fork/hive_nav.js`) en vez de dentro de
|
||||
los ficheros del proyecto original. No es manía: **epsylon publica una versión cada
|
||||
dos a cuatro días** y reescribe a fondo justo los ficheros donde antes vivía esta
|
||||
interfaz.
|
||||
|
||||
Con la separación, sobre los ficheros de upstream solo quedan **enganches de una
|
||||
línea**, y una versión nueva se integra sin arrastrar nada. Antes eran unas 90
|
||||
divergencias; ahora `backend.js` diverge en unas 30 líneas y `main_views.js` en unas
|
||||
40, casi todas enganches.
|
||||
|
||||
Es lo que permite ir al día sin perder la interfaz por el camino.
|
||||
|
||||
## Sin JavaScript en la navegación
|
||||
|
||||
Se mantiene el criterio del proyecto original: la navegación no usa JavaScript. Los
|
||||
desplegables son CSS, los filtros son formularios y los cambios de estado son envíos
|
||||
con recarga.
|
||||
|
||||
La única excepción son las **llamadas**, que no pueden existir sin JavaScript. Van en
|
||||
un fichero aparte servido desde el propio Oasis, del mismo modo que el visor de PDF
|
||||
que el proyecto oficial ya incluye — y **solo se carga en la página de una sala**.
|
||||
69
Karvan.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# 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.**
|
||||
69
Limitaciones.md
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# Qué NO tiene, y qué falla
|
||||
|
||||
> ⚠ Rama experimental, no oficial. El Oasis oficial es
|
||||
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
|
||||
|
||||
Esta página existe porque una rama experimental honesta dice lo que falla. Si buscas
|
||||
la lista de virtudes, está en la [portada](Home).
|
||||
|
||||
## Los metadatos EXIF no se eliminan en el móvil
|
||||
|
||||
**El más importante.** Al subir una foto desde Android, **sus metadatos viajan
|
||||
intactos, incluida la ubicación GPS** si la cámara la guardó.
|
||||
|
||||
El código tiene un limpiador de metadatos, pero depende de una biblioteca con
|
||||
componentes nativos que **no se empaqueta en Android** (el paquete móvil no lleva
|
||||
ningún binario nativo, a propósito). El limpiador comprueba si está disponible y, si
|
||||
no, **devuelve la imagen sin tocar**.
|
||||
|
||||
Mientras no se resuelva: **quita la ubicación de las fotos antes de subirlas**, o
|
||||
desactiva el guardado de ubicación en tu cámara.
|
||||
|
||||
## Consultas de DNS a Google y Cloudflare
|
||||
|
||||
El arranque del backend en Android fija los servidores DNS a `8.8.8.8`, `1.1.1.1` y
|
||||
`8.8.4.4`. Cada resolución de nombre pasa por Google o Cloudflare, y en redes que
|
||||
filtren DNS externo puede directamente no funcionar.
|
||||
|
||||
## Módulos que no están
|
||||
|
||||
- **Inteligencia artificial**: fuera. El modelo son unos 4 GB.
|
||||
- **housing**: portado pero apagado.
|
||||
- **Descubrimiento en red local**: desactivado en el móvil.
|
||||
|
||||
## Traducciones incompletas
|
||||
|
||||
De las claves propias de la rama, **solo el castellano está completo**. Los otros diez
|
||||
idiomas caen al inglés. No se han traducido a máquina a propósito: una traducción sin
|
||||
alguien que la revise da una falsa sensación de cobertura.
|
||||
|
||||
## Cosas que aún no se han probado en un dispositivo real
|
||||
|
||||
El envoltorio propio de Android **compila y genera una APK correcta**, con los
|
||||
permisos y el método que faltaba. Pero **no se ha probado todavía en un móvil
|
||||
físico**: que arranque el backend, que la interfaz cargue y que la cámara funcione al
|
||||
pulsar Llamar.
|
||||
|
||||
Hasta que eso esté comprobado, trátalo como lo que es: código que compila.
|
||||
|
||||
## Subir ficheros desde el navegador interno
|
||||
|
||||
El envoltorio propio **todavía no implementa el diálogo de selección de ficheros** del
|
||||
navegador interno. Los botones de subir imagen o documento pueden no abrir nada.
|
||||
Es hermano del problema de los permisos de cámara, y se arregla igual.
|
||||
|
||||
## La contraseña de la copia de seguridad viaja en la dirección
|
||||
|
||||
La exportación de identidad se hace con una petición que **lleva la contraseña en la
|
||||
URL**, con lo que acaba en el historial del navegador y en los registros. Está
|
||||
pendiente de volver a enviarse en el cuerpo de la petición.
|
||||
|
||||
## Un participante por nodo en las llamadas
|
||||
|
||||
Dos pestañas del mismo Oasis comparten identidad y no se enlazan entre sí.
|
||||
|
||||
## Y lo que se descartó a propósito
|
||||
|
||||
- **Subtemas en el foro**: la rama tenía un intento a medias que además rompía los
|
||||
hilos. Se quitó. El proyecto oficial ya tiene subtemas de primera clase.
|
||||
- **Selector de chats propio**: el oficial trae uno mejor. Se adoptó el suyo.
|
||||
102
Llamadas.md
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
# 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.
|
||||
|
||||
## Los permisos se piden al llamar, no al instalar
|
||||
|
||||
La app **declara** los permisos de cámara y micrófono porque Android obliga a que la
|
||||
lista sea fija y se decida al compilar. Pero **no se conceden al instalar**: son
|
||||
permisos peligrosos y el sistema los pide **la primera vez que pulsas Llamar**.
|
||||
|
||||
Si nunca llamas, no se te pide nada y la aplicación no accede a la cámara ni al
|
||||
micrófono.
|
||||
|
||||
Esto no era posible con la APK anterior: el envoltorio de Android que se venía usando
|
||||
no implementaba el método que concede permisos al contenido web, así que el navegador
|
||||
interno **denegaba siempre** el acceso por mucho que se declararan los permisos.
|
||||
|
||||
## 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**.
|
||||
52
Roadmap.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
# Estado y hoja de ruta
|
||||
|
||||
> ⚠ Rama experimental, no oficial. El Oasis oficial es
|
||||
> https://github.com/epsylon/oasis · [Volver a la portada](Home)
|
||||
|
||||
Sin fechas: esto se hace cuando se puede.
|
||||
|
||||
## Hecho
|
||||
|
||||
- **Al día con Oasis 0.9.5**, con los módulos nuevos del proyecto oficial (encuestas,
|
||||
blogs, coincidencias, menciones) integrados y accesibles desde los hexágonos.
|
||||
- **El código propio, separado** de los ficheros de upstream, que es lo que permite
|
||||
seguir el ritmo de versiones sin perder la interfaz.
|
||||
- **[Karvan](Karvan)**: salas efímeras con autodestrucción, funcionando sin JavaScript.
|
||||
- **[Envoltorio Android propio](Compilar)**: resuelve el bloqueo que impedía las
|
||||
videollamadas, y de paso mejora la seguridad del empaquetado.
|
||||
- **Fuera el STUN de Google**, con configuración para TURN propio.
|
||||
- **Traducción al castellano** de todo el módulo de salas, que antes salía en inglés.
|
||||
|
||||
## En curso
|
||||
|
||||
- Probar el envoltorio en un móvil real. Es lo único que separa a las videollamadas de
|
||||
funcionar de verdad.
|
||||
- Poner en marcha un TURN en un pub para las llamadas fuera de la red local.
|
||||
|
||||
## Sin empezar
|
||||
|
||||
- **Varias identidades en el mismo dispositivo**, con cambio desde la interfaz.
|
||||
El diseño está: el obstáculo real no es técnico sino de seguridad — hay que impedir
|
||||
que dos dispositivos publiquen con la misma identidad, porque eso **parte el registro
|
||||
y la mata para siempre**.
|
||||
- **Automatizar la construcción**: que una versión nueva del proyecto oficial genere
|
||||
la APK firmada y publicada sola.
|
||||
- **Limpiar los metadatos EXIF** en el móvil (ver [Limitaciones](Limitaciones)).
|
||||
- **Diálogo de selección de ficheros** en el navegador interno.
|
||||
|
||||
## Bloqueado, y por qué
|
||||
|
||||
- **Play Store**: exige un formato de paquete que solo se puede generar desde el
|
||||
proyecto Gradle. Ahora que existe, deja de estar bloqueado, pero sigue haciendo
|
||||
falta una cuenta de desarrollador de pago.
|
||||
- **Criptografía post-cuántica de karvan-protocol**: su componente nativo no compila
|
||||
para Android. Haría falta una versión portable.
|
||||
|
||||
## Descartado
|
||||
|
||||
- **Subtemas propios en el foro**: nunca llegaron a funcionar, rompían los hilos y
|
||||
habrían metido un campo que ningún otro cliente de la red entiende, permanente en el
|
||||
registro. El proyecto oficial ya resuelve eso mejor.
|
||||
- **Congelar las dependencias de SSB**: no aporta —ya viajan dentro del paquete— y
|
||||
rompería la posibilidad de seguir las versiones del proyecto oficial, que es lo que
|
||||
sostiene esta rama.
|
||||
BIN
img/01-home-hexagonos.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
BIN
img/03-lista-salas.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
img/04-barra-personalizar.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
img/05-modulos.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
img/06-filtro-personal.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
img/07-chats.png
Normal file
|
After Width: | Height: | Size: 42 KiB |
BIN
img/08-perfil.png
Normal file
|
After Width: | Height: | Size: 42 KiB |