Comunicados, comisiones y debates salen del pub: los publica quien es miembro de la tribu de la acampada y además sigue la cuenta de la acampada. Directo enlaza al HUB. Lista de centros sociales y colectivos de Madrid con enlaces comprobados.
117 lines
3.9 KiB
Markdown
117 lines
3.9 KiB
Markdown
# acampada26s.net
|
|
|
|
Web de la acampada del 26S en Madrid. Comunicados, directo, cómo organizarse
|
|
y dónde están los colectivos.
|
|
|
|
HTML y CSS. Sin JavaScript en el navegador, sin cookies, sin analítica y sin
|
|
peticiones a terceros. La tipografía va dentro del repo.
|
|
|
|
La comunicación viva no depende de esta web: va por un pub de
|
|
[OASIS](https://code.03c8.net/krakenslab/oasis) (Secure Scuttlebutt). Si la web
|
|
cae o la tiran, el pub y lo publicado siguen en la red.
|
|
|
|
## Estructura
|
|
|
|
```
|
|
site/ lo que se sirve (copiar tal cual a /var/www/acampada26s.net)
|
|
deploy/ nginx y timer de systemd
|
|
tools/ generador desde OASIS y limpieza de imágenes
|
|
```
|
|
|
|
## Qué sale de dónde
|
|
|
|
- **Directo**: enlace al HUB del pub (`/c?type=feed`). Lo sube la gente de
|
|
comunicación desde OASIS. No pasa por esta web.
|
|
- **Comunicados, comisiones y debates**: los genera `tools/` a partir de OASIS
|
|
cada dos minutos. Nadie edita HTML a mano.
|
|
- **Colectivos**: lista fija en `site/index.html`. Para añadir uno, un `<li>`
|
|
más. Solo webs o cuentas comprobadas.
|
|
|
|
## Publicar desde OASIS
|
|
|
|
Quien publica en la web: miembros de la tribu pública de la acampada **a los
|
|
que la cuenta de la acampada sigue**. Hacen falta las dos cosas. Unirse a una
|
|
tribu es un mensaje que cualquiera puede publicar sobre sí mismo (el código de
|
|
invitación solo lo comprueba la interfaz), así que la tribu sola no vale como
|
|
permiso. El follow lo firma la cuenta de la acampada y no se puede falsificar.
|
|
|
|
- Dar permiso: invitar a la tribu y seguir desde la cuenta de la acampada.
|
|
- Quitarlo: dejar de seguir. Sus comunicados desaparecen en la siguiente pasada.
|
|
|
|
Qué se publica:
|
|
|
|
- **Comunicado**: un post con `#comunicado26s`. La primera línea es el título.
|
|
Las imágenes adjuntas salen en la página. Si se borra en OASIS, se borra aquí.
|
|
- **Comisión**: una subtribu pública de la tribu de la acampada, creada por
|
|
alguien con permiso.
|
|
- **Debate**: un foro público abierto por alguien con permiso.
|
|
|
|
Las tribus privadas y lo que se escribe dentro de las tribus va cifrado; eso
|
|
no sale en la web ni debe salir.
|
|
|
|
La tribu tiene que ser pública (no anónima) y con invitación estricta, y la
|
|
tiene que crear la cuenta de la acampada.
|
|
|
|
## Imágenes
|
|
|
|
Las de los comunicados las sirve el pub (`/c/blob/...`). Las que se suban a
|
|
mano a `site/img/`, siempre limpias antes:
|
|
|
|
```
|
|
tools/limpia-img.sh site/img/*.jpg
|
|
```
|
|
|
|
El EXIF lleva GPS, modelo de móvil y hora. Caras tapadas salvo permiso expreso.
|
|
|
|
## Despliegue
|
|
|
|
Requisitos: nginx, certbot, el pub OASIS en la misma máquina, Node 22 y
|
|
Python 3.9+.
|
|
|
|
```
|
|
rsync -a --exclude comunicados/ site/ /var/www/acampada26s.net/
|
|
cp deploy/nginx.conf /etc/nginx/sites-available/acampada26s.net
|
|
cp deploy/hub.conf /etc/nginx/snippets/acampada26s-hub.conf
|
|
ln -s ../sites-available/acampada26s.net /etc/nginx/sites-enabled/
|
|
nginx -t && systemctl reload nginx
|
|
```
|
|
|
|
Un `rsync` de `index.html` deja los bloques generados vacíos; el timer los
|
|
repone en dos minutos.
|
|
|
|
### Pub OASIS
|
|
|
|
`sh oasis.sh server`. El HUB web escucha en `:3000`; mejor solo en local
|
|
(`--host=127.0.0.1`). nginx publica `/c` en solo lectura y sin la IP de quien
|
|
visita.
|
|
|
|
### Generador
|
|
|
|
```
|
|
cp -r . /opt/26s
|
|
cp deploy/web26s.service deploy/web26s.timer /etc/systemd/system/
|
|
# rellenar CUENTA, TRIBU, OASIS_DIR y User en web26s.service
|
|
systemctl enable --now web26s.timer
|
|
```
|
|
|
|
A mano:
|
|
|
|
```
|
|
OASIS_DIR=~/oasis CUENTA=@...ed25519 TRIBU=%...sha256 node tools/extrae.js \
|
|
| python3 tools/genera.py site
|
|
```
|
|
|
|
`extrae.js` solo lee del sbot por su socket local. `genera.py` escapa todo lo
|
|
que viene de SSB, solo deja enlaces `http(s)` y escribe de forma atómica.
|
|
|
|
## Comprobaciones antes de subir
|
|
|
|
```
|
|
grep -rniE '<script|javascript:|\son[a-z]+=' site/ # nada
|
|
grep -rnoE 'https?://[^"]+' site/ # solo enlaces salientes
|
|
```
|
|
|
|
## Licencia
|
|
|
|
Código: AGPL-3.0 (`LICENSE`). Textos e imágenes: CC BY-SA 4.0.
|
|
Tipografía Anton: SIL OFL 1.1 (`site/fonts/OFL.txt`).
|