andros cfdf3aa20d Add _author_from_post helper and fix broken test import
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.
2026-05-19 20:49:02 +02:00

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 defecto false. Usar true solo en builds instaladas directamente desde Xcode. TestFlight y App Store usan false.

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 .p8 de 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 pushes
  • nginx: proxy en el puerto NGINX_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 .
S
Description
No description provided
Readme 57 KiB
Languages
Python 96.9%
Dockerfile 1.9%
Shell 1.2%