# Informe de Auditoría — Astra Auth ON/OFF + Comentarios

**Fecha:** 2026-09-18
**Auditor:** opencode
**Binario:** `/usr/bin/astra` — MD5 `d3855d37bfb3c5f313ed47346d4299d8`

---

## 1. Versión de Astra

| Componente | Valor |
|---|---|
| Astra | `commit:c8d87eba` — 2025-06-12 |
| libuv | 1.44.2 |
| zlib | 1.3 |
| openssl | 1.1.1w |
| srt | 1.5.4 |
| Arquitectura | ELF 64-bit x86-64 |
| Tamaño | 7,959,968 bytes |

---

## 2. Pruebas funcionales de autenticación

Todas las pruebas se realizaron con un **network namespace real** (172.20.0.2)
para garantizar que el IP de origen fuera el correcto.

| Prueba | Escenario | Resultado esperado | Resultado real | Estado |
|---|---|---|---|---|
| T1 | IP en allow (exacta) | 404 (auth OK, stream no existe) | 404 | ✅ |
| T2 | IP fuera de allow | 403 (bloqueado) | 403 | ✅ |
| T3 | IP en allow (CIDR /24) | 404 (auth OK) | 404 | ✅ |
| T4 | IP en allow Y deny | 403 (deny gana) | 403 | ✅ |
| T5 | IP desactivada (toggled off) | 403 tras restart | 403 | ✅ |
| T6 | IP reactivada | 404 tras restart | 404 | ✅ |
| T7 | Stream sin auth desde IP permitida | 200 | 200 | ✅ |

### Test de integración completo (UI → guardar → restart → auth)

```
PASO 1: allow=[127.0.0.1, 172.20.0.2]  → cliente 404 (permitido)  ✅
PASO 2: Toggle OFF via UI + Apply      → disabled=[172.20.0.2]    ✅
PASO 3: Restart                        → cliente 403 (bloqueado)  ✅
PASO 4: Toggle ON via UI + Apply       → allow=[..., 172.20.0.2]  ✅
PASO 5: Restart                        → cliente 404 (permitido)  ✅
```

**RESULTADO: INTEGRACIÓN COMPLETA OK**

### Hallazgo importante (corregido tras prueba en caliente)

✅ **Los cambios de IP se aplican AL INSTANTE desde el panel.**
Al pulsar APPLY, el comando `set-auth` del API actualiza la autenticacion
en memoria inmediatamente (verificado con network namespace real).

⚠️ **Editar el archivo `astra.conf` a mano SÍ requiere reinicio.**
Solo la edicion directa del archivo (sin pasar por el panel) necesita
`systemctl restart astra`. El panel no lo necesita.

⚠️ **Activar/desactivar la autenticacion entera requiere reinicio.**
La casilla "Enable built-in HTTP/HLS authentication" si muestra
"restart required" en la UI.

**Nota:** El API de control (`/control/`) siempre requiere Basic auth,
independientemente de la lista de IPs. La lista `http_ip_allow` solo
aplica a los streams (`/play/`) y al playlist.

---

## 3. Integridad del binario

| Comparación | Bytes diferentes | Región |
|---|---|---|
| Original → pre-onoff | 5,738 | 0x77A28D – 0x77BE44 (JS comentarios) |
| pre-onoff → v3 (actual) | 6,809 | 0x77A78F – 0x77B83D (JS ON/OFF) |

El parche solo modifica el **JavaScript embebido del panel web**
(`settings-http-auth.js`). El código C (auth, streams, DVB, softcam)
no se toca.

### Config

| Verificación | Resultado |
|---|---|
| JSON válido | ✅ |
| Arrays allow/comments alineados | ✅ (4/4) |
| Arrays disabled/dcomments alineados | ✅ (0/0) |
| Sin duplicados | ✅ |

---

## 4. Revisión de logs

| Verificación | Resultado |
|---|---|
| Errores post-deploy (10:15) | 0 errores no-bitrate |
| Errores de autenticación | 0 |
| Descifrado ECM | Funcionando (keys cada ~20s) |
| Streams activos | 21 canales configurados |

Los únicos mensajes "ERROR" son `Bitrate:0Kbit/s PES:0 CC:0` al arrancar
los streams sin clientes conectados — comportamiento normal de Astra.

---

## 5. Pruebas de estrés de la UI

| Prueba | Operaciones | Resultado |
|---|---|---|
| Agregar 5 IPs rápido | 5 clics "new ip" | ✅ 6 inputs |
| Toggle rápido | 12 clics seguidos | ✅ Estados correctos |
| Agregar comentarios | 3 campos | ✅ |
| Eliminar IPs | 2 clics "X" | ✅ 4 restantes |
| Guardar | Apply | ✅ |
| Recargar | F5 + navegar | ✅ Persistencia correcta |
| Errores JS | — | ✅ 0 errores |

---

## 6. Estado final de producción

| Item | Estado |
|---|---|
| Binario v3 | `d3855d37bfb3c5f313ed47346d4299d8` |
| Servicio | active (desde 10:15:51) |
| Playlist | HTTP 200 |
| Canales (AXN, Cinecanal, TNT, Disney) | HTTP 200 |
| IP no autorizada | HTTP 403 |
| IPs activas | 4 |
| Canales | 21 |
| Softcam | mrs.servervip.org:15001 |

---

## 7. Backups disponibles

| Archivo | MD5 | Descripción |
|---|---|---|
| `/home/luisc/astra-respaldo/astra` | `9b2279...` | Original sin parches |
| `/home/luisc/astra-respaldo/astra.pre-onoff` | `e17f39...` | Solo comentarios |
| `/usr/bin/astra` | `d3855d...` | v3 actual (ON/OFF + comentarios) |

### Rollback

```bash
sudo cp /home/luisc/astra-respaldo/astra.pre-onoff /usr/bin/astra
sudo systemctl restart astra
```

O al original completo:

```bash
sudo cp /home/luisc/astra-respaldo/astra /usr/bin/astra
sudo systemctl restart astra
```

---

## 8. Conclusión

✅ **Todos los cambios son funcionalmente correctos.**
La autenticación por IP (allow/deny/CIDR/exacta) funciona igual que antes
del parche. Los botones ON/OFF y los comentarios no afectan el
funcionamiento de la autenticación ni de los streams.

⚠️ **Única advertencia:** recordar que tras cambiar las IPs en el panel
hay que **reiniciar Astra** para que los cambios de auth tengan efecto.
