main
Extract netloc parsing into _author_from_post so tests can import and verify it independently. _get_author_nick uses it as fallback instead of duplicating the urlparse logic.
Org Social Push
Backend de push notifications para la app iOS de Org Social. Escucha el stream SSE del relay y envía notificaciones APNs cuando llega una notificación para un usuario suscrito.
Endpoints
Suscribir dispositivo
POST /subscribe/
Content-Type: application/json
{
"feed": "https://example.com/social.org",
"device_token": "<iOS device token>",
"sandbox": false
}
sandbox: opcional, por defectofalse. Usartruesolo en builds instaladas directamente desde Xcode. TestFlight y App Store usanfalse.
Respuesta 201 (nuevo) o 200 (actualizado).
Desuscribir dispositivo
DELETE /unsubscribe/
Content-Type: application/json
{
"device_token": "<iOS device token>"
}
Respuesta 200 o 404 si no existe.
Despliegue
Requisitos
- Docker y Docker Compose
- Archivo
.p8de APNs (Apple Developer → Keys → APNs)
1. Clonar y configurar
git clone ssh://git@ssh.git.andros.dev:8622/org-social/org-social-push.git
cd org-social-push
cp envExample .env
nano .env
Variables obligatorias en .env:
| Variable | Descripción |
|---|---|
SECRET_KEY |
Clave secreta Django |
APNS_KEY_ID |
ID de la clave APNs (10 caracteres) |
APNS_TEAM_ID |
Team ID de Apple Developer |
APNS_BUNDLE_ID |
Bundle ID de la app iOS |
APNS_PRIVATE_KEY_PATH |
Ruta al .p8 (por defecto /app/certs/apns.p8) |
APNS_SANDBOX |
Obsoleto, ignorado. El entorno se gestiona por dispositivo con el campo sandbox del endpoint /subscribe/ |
RELAY_BASE_URL |
URL del relay (por defecto https://relay.org-social.org) |
2. Colocar la clave APNs
mkdir -p certs
cp /ruta/a/AuthKey_XXXXX.p8 certs/apns.p8
3. Arrancar
docker compose up -d --build
Servicios que levanta:
django: API REST (migraciones + uvicorn)listener: proceso que escucha el SSE del relay y despacha pushesnginx: proxy en el puertoNGINX_PORT(por defecto 8080)
Actualizar en producción
# Local
git push
# Servidor
ssh debian@home.server "cd ~/www/org-social-push && git pull && docker compose up -d --build"
Desarrollo
# Tests
docker compose run --rm django pytest app/ -v
# Lint
docker compose run --rm django ruff check .
docker compose run --rm django ruff format --check .
Description
Languages
Python
96.9%
Dockerfile
1.9%
Shell
1.2%