> ## Content Index
> Fetch the complete content index at: https://locosporlaradio.com.ar/llms.txt
> Use this file to discover other available public pages before exploring further.

# LinBPQPages: una web alternativa para la mensajería de LinBPQ
- URL: https://locosporlaradio.com.ar/linbpq-pages/
- Published: 2026-10-14T05:18:21.000Z
- Updated: 2026-10-14T11:56:22.000Z
- Description: LinBPQPages es una web alternativa para leer y escribir mensajería en un BBS LinBPQ: listado y búsqueda de mensajes, adjuntos, archivos 7+ y API JSON. Cómo funciona y cómo ponerla en marcha.
- Author: Luis Pichio
- Tags: Software, packet-radio, radio, bpq, bbs, linbpq, amateur, Digitales, ham, linux, proyecto, radioaficionado

LinBPQPages es una aplicación web para **leer y redactar mensajes** en una instancia de LinBPQ. Es un proyecto hermano de LinFBBPages y nació de un par de necesidades concretas: poner a disposición la mensajería de mi [BBS](https://bbs.locosporlaradio.com.ar/?ref=locosporlaradio.com.ar) en la web sin exponer las herramientas administrativas y contar con una API REST para integración de servicios / agentes.

En lugar de apoyarse en la API JSON de LinBPQ —que hoy no expone ni los cuerpos de los mensajes ni un endpoint de envío suficiente— LinBPQPages accede **directamente al sistema de archivos** del BBS: `DIRMES.SYS`, `Mail/`, `linmail.cfg` y `HTML/7plus/`. Está escrita en Go usando **sólo la biblioteca estándar**, con el frontend embebido (`go:embed`) y disponible en inglés y español.

## ¿Por qué no usar la web embebida de LinBPQ?

- **Más moderna y enfocada**: una interfaz responsive pensada sólo para mensajería, sin menús de administración de por medio.
- **Simplicidad**: leer y redactar boletines, y ver o descargar los 7+ decodificados, nada más.
- **Aislación**: la administración del BBS queda aparte; la web de mensajería no la expone.
- **API JSON**: cada vista es un endpoint, así que se puede integrar con servicios externos o agentes.

![Lista de mensajes de LinBPQPages](https://locosporlaradio.com.ar/content/images/2026/10/linbpq-message-list.png)

## Características

- Inicio de sesión con callsign y contraseña de `BBSUsers` en `linmail.cfg`.
- Lista de mensajes paginada y con búsqueda, leída de `DIRMES.SYS`, respetando las reglas de privacidad de LinBPQ.
- Lectura de `Mail/m_%06d.mes`: cabeceras `R:`, contenido RFC822/MIME y adjuntos B2 descargables (con previsualización segura de imágenes raster).
- Redacción de mensajes privados (`SP`) o boletines (`SB`) a través de `Mail/Import/mail.in`, indicando el intervalo de import configurado.
- Navegación de los archivos 7+ decodificados (requiere instalación de scripts para búsqueda y decodificado).
- Interfaz responsive con traducciones en inglés y español.

![Archivos 7+ en LinBPQPages](https://locosporlaradio.com.ar/content/images/2026/10/linbpq-7plus.png)

## Cómo funciona

- Backend en Go usando **sólo la biblioteca estándar**, con frontend HTML/CSS/JS embebido vía `go:embed`.
- Lee `DIRMES.SYS`, `Mail/*.mes`, `linmail.cfg` y `HTML/7plus/`.
- La única escritura es un *append* a `Mail/Import/mail.in`. La aplicación no modifica mensajes, ni el índice, ni la configuración, ni los 7+.
- Las sesiones viven en memoria y usan una cookie `httpOnly` con `SameSite=Lax`.
- No usa la API JSON de LinBPQ: hoy no expone ni los cuerpos de los mensajes ni un endpoint de envío suficiente.
- Los formatos en disco, el parseo de mensajes, los campos de usuario y el comportamiento de la cola están documentados en `ARCHITECTURE.md`.

## Requisitos y puesta en marcha

- Go 1.22+ para compilar.
- Lectura sobre `DIRMES.SYS`, `Mail/`, `linmail.cfg` y `HTML/7plus/`.
- Escritura sobre `Mail/Import/` para crear o agregar a `mail.in`.
- El servicio HTTP de LinBPQ en este entorno usa el puerto 8080; LinBPQPages usa 8081 por defecto.

```sh
CGO_ENABLED=0 go build -trimpath -ldflags='-s -w' -o linbpqpages ./cmd/linbpqpages
./linbpqpages --bpq-dir /home/luis/linbpq --listen :8081

```

Se configura con `--help` o variables de entorno:

| Flag             | Variable de entorno         | Default               | Descripción                      |
| ---------------- | --------------------------- | --------------------- | -------------------------------- |
| \--bpq-dir       | LINBPQPAGES\_BPQ\_DIR       | /home/luis/linbpq     | Directorio de datos de LinBPQ.   |
| \--listen        | LINBPQPAGES\_LISTEN         | :8081                 | Dirección HTTP de escucha.       |
| \--mail-cfg      | LINBPQPAGES\_MAIL\_CFG      | <bpq-dir>/linmail.cfg | Configuración del BBS.           |
| \--sevenplus-dir | LINBPQPAGES\_SEVENPLUS\_DIR | <bpq-dir>/HTML/7plus  | Archivos 7+ decodificados.       |
| \--session-ttl   | LINBPQPAGES\_SESSION\_TTL   | 8h                    | Vida de las sesiones en memoria. |

## API

Todas las respuestas son JSON. Todos los endpoints requieren sesión, excepto `POST /api/login`:

| Método | Ruta                                    | Descripción                                                              |
| ------ | --------------------------------------- | ------------------------------------------------------------------------ |
| POST   | /api/login                              | {callsign,password} → cookie de sesión.                                  |
| POST   | /api/logout                             | Cerrar sesión.                                                           |
| GET    | /api/me                                 | Usuario autenticado.                                                     |
| GET    | /api/status                             | BBS, intervalo/estado de import, tamaño de cola y contadores del índice. |
| GET    | /api/messages                           | Lista filtrada; type, q, page, page\_size (máx. 200).                    |
| GET    | /api/messages/{num}                     | Metadatos, rutas, texto y adjuntos.                                      |
| GET    | /api/messages/{num}/attachments/{index} | Descarga un adjunto tras verificar la visibilidad.                       |
| POST   | /api/messages                           | {type: P o B, to, via, title, body} → encola un mensaje.                 |
| GET    | /api/files                              | Lista los archivos 7+.                                                   |
| GET    | /api/files/{name}                       | Descarga un 7+ (sólo basenames regulares; se rechazan symlinks).         |

## Seguridad

- Los callsigns no distinguen mayúsculas/minúsculas; las contraseñas sí. Usuarios sin contraseña o con `F_Excluded` no pueden entrar.
- Los usuarios comunes ven boletines/NTS salvo los de estado `K` o `H`, y mensajes privados sólo si son remitente o destinatario. Los sysops ven todos los registros válidos; los mensajes ocultos devuelven `404`.
- `Mail/Import`, `Mail/Export`, `Mail/Restart` y las partes 7+ crudas no se sirven.
- Los nombres de archivo se validan y no se siguen symlinks. El contenido y los nombres de adjuntos se renderizan como texto; el HTML MIME nunca se ejecuta.
- `linmail.cfg` puede contener contraseñas en texto plano: no copiarlo a los fixtures ni al repositorio.
- Está pensada para redes de confianza (LAN/VPN). Para exponerla fuera, usar TLS y autenticación perimetral o un proxy inverso.

## Roadmap

Actual:

- Información de la aplicación: referencias al proyecto BPQ, versión, licencia y repositorio.
- Información del BBS.
- Lista de mensajes: orden por columna y scroll infinito.
- Mensajería: envío de archivos (conversión a 7+) y fuente CP437 (?).
- Historial de leídos y filtro por "no leídos".
- Login sin contraseña (sólo lectura) con formulario de solicitud de usuario.
- Terminal: web ↔ backend ↔ Telnet ↔ LinBPQ.
- API: documentación y ejemplos.

Futuro:

- Administración de la instancia de LinBPQ (sysop): configuración, administración de usuarios, logs.

## Referencias

- [LinBPQ](https://www.cantab.net/users/john.wiseman/Documents/InstallingLINBPQ.htm?ref=locosporlaradio.com.ar)
- [LinBPQPages](https://github.com/luispichio/LinBPQPages?ref=locosporlaradio.com.ar)
- [LinFBBPages](https://github.com/luispichio/LinFBBPages?ref=locosporlaradio.com.ar)
- [BBS de LW6DIO](https://bbs.locosporlaradio.com.ar/?ref=locosporlaradio.com.ar)
- [Locos por la radio](https://locosporlaradio.com.ar/)