ED

Erizos-drop

Documentation
Connexion Upload

Vue d'ensemble

Erizos-drop — dépôt sécurisé de médias pour les écrans LED RTS. Application d'envoi de fichiers volumétriques pour Radio Télévision Suisse.

  • Authentification Azure AD, LDAPS media.int ou mode secours
  • Upload reprise via tus.io (chunks 64 Mo, taille illimitée)
  • Scan antivirus ClamAV avant mise à disposition
  • Onglet Suivi : monitoring, ffprobe, séquence détaillée (upload → analyse → outbox → publication Erizos)
  • Mise à disposition : watch folder /data/outbox ou API REST
  • Publication optionnelle vers MediaHub Erizos (mur d'images LED), configurable par studio/site

URL de cette instance :

Flux de traitement

  1. Upload — l'utilisateur envoie le fichier (tus, reprise automatique)
  2. Quarantaine — le fichier est assemblé dans /data/quarantine
  3. Analyse — scan ClamAV asynchrone (virus → suppression)
  4. Mise à disposition — fichier propre déposé dans /data/outbox + .meta.json
  5. Publication Erizos (optionnel) — envoi vers un MediaHub configuré (upload direct ou lien de téléchargement)
Navigateur → tus → Quarantaine → ClamAV → Outbox → [MediaHub Erizos]
                                              ↘ watch folder / API REST

Suivi & monitoring

L'onglet Suivi dans l'interface affiche l'historique des transferts :

  • Aperçu média (vignette + lightbox haute résolution)
  • Métadonnées ffprobe (résolution, codec, durée, audio…)
  • Bouton + pour déplier la séquence : Upload → Analyse → Mise à disposition → Publication Erizos (si demandée)
  • Badges de statut : OK, OK · Publié, Pub. échec, Outbox seul.
  • En cas d'échec de publication : message d'erreur détaillé (serveur, méthode) et bouton Réessayer dans la séquence
  • Export CSV des entrées filtrées

Les données de suivi sont internes (/data/uploads/.upload-logs.jsonl) — distinctes du dossier de sortie. Le statut de publication est aussi persisté dans le .meta.json outbox (erizosPublish).

Publication Erizos

Après un scan réussi, l'utilisateur peut publier le média sur un MediaHub Erizos (mur d'images LED). L'outbox reste la source de vérité ; la publication est une étape optionnelle post-traitement.

Déroulement côté upload

  1. Le fichier est analysé et déposé dans l'outbox.
  2. Une modale propose le serveur MediaHub et la méthode de publication.
  3. L'utilisateur peut publier, choisir Outbox seulement, ou mémoriser son choix pour la session.
  4. En cas d'échec : alerte immédiate, message visible 60 s dans la file d'upload, entrée Pub. échec dans le Suivi.

Méthodes de publication

MéthodeDescription
Upload direct Envoi du fichier vers /api/assets/browse/upload sur le MediaHub (port 5600, HTTPS).
Lien distant Erizos-drop expose une URL de téléchargement outbox (OUTBOX_API_KEY requis) ; le MediaHub récupère le fichier via son endpoint d'ingest (linkIngestPath, défaut /api/ingest/url).

Authentification MediaHub

Chaque serveur Erizos dispose de ses propres identifiants (utilisateur / mot de passe MediaHub). Erizos-drop obtient une session via POST /api/login puis envoie Authorization: Bearer … sur les requêtes suivantes. Les mots de passe sont chiffrés (AES-256-GCM) dans /data/uploads/.erizos-servers.json.

API (session utilisateur)

MéthodeEndpointDescription
GET /api/erizos/targets Liste des serveurs MediaHub actifs (modale upload)
POST /api/erizos/publish Publier un fichier outbox (filename, serverId, method : upload ou link)
POST /api/erizos/skip Enregistrer « outbox seulement » (publication non demandée)

Statuts erizosPublish

ValeurSignification
publishedPublication réussie sur le MediaHub
failedÉchec (serveur injoignable, auth, ingest…) — republication possible
skippedUtilisateur a choisi outbox seulement
Important : un fichier reste toujours disponible dans l'outbox même si la publication Erizos échoue. Vérifiez le Suivi ou l'onglet Admin → Dossier de sortie pour republier.

Dossier de sortie (watch folder)

Après analyse, chaque fichier propre est accompagné d'un manifeste JSON signalant qu'il est prêt :

/data/outbox/
├── video.mp4
└── video.mp4.meta.json

Le fichier .meta.json n'est créé qu'une fois le traitement terminé (scan, ffprobe, aperçu). L'application consommatrice peut :

  • Watch folder — surveiller ./data/outbox (montage SMB recommandé)
  • API REST — interroger /api/outbox (voir ci-dessous)
Montage SMB : exposez uniquement ./data/outbox à l'app consommatrice, pas ./data/uploads (données internes RTS).

Exemple de manifeste

{
  "version": 1,
  "ready": true,
  "filename": "video.mp4",
  "size": 336578280,
  "username": "upload",
  "scanId": "8d37974e-471a-4ca3-bea6-b3ea97399332",
  "mediaInfo": { "width": 1920, "height": 1080, "duration": 1468 },
  "deliveredAt": "2026-06-06T08:52:11.864Z",
  "erizosPublish": {
    "status": "published",
    "serverId": "…",
    "serverName": "Studio Genève",
    "method": "upload",
    "publishedAt": "2026-06-06T08:53:00.000Z",
    "updatedAt": "2026-06-06T08:53:00.000Z",
    "error": null,
    "actor": "upload"
  }
}

Administration

L'onglet Admin (comptes adm-* uniquement) permet de :

  • Consulter le tableau de bord (stockage, file ClamAV, transferts du jour)
  • Gérer les serveurs Erizos : hôte, port 5600, HTTPS, dossier upload, chemin ingest lien, serveur par défaut, méthode par défaut, identifiants MediaHub
  • Tester la connectivité MediaHub (Tester)
  • Parcourir l'outbox avec badges de publication (Publié / Échec / Outbox seulement) et bouton Réessayer
  • Publier manuellement depuis l'outbox (upload ou lien)
  • Purger les logs de monitoring (7 j, 30 j ou tout)

Configuration serveurs : /data/uploads/.erizos-servers.json (persistant, monté avec les uploads).

API admin Erizos

MéthodeEndpointDescription
GET/api/admin/erizos/serversLister / CRUD serveurs
POST/api/admin/erizos/serversCréer un serveur
PUT/api/admin/erizos/servers/{id}Modifier un serveur
DELETE/api/admin/erizos/servers/{id}Supprimer un serveur
POST/api/admin/erizos/test/{id}Tester l'accès MediaHub
POST/api/admin/erizos/publishPublier depuis l'outbox (admin)
POST/api/admin/erizos/skipMarquer outbox seulement (admin)

API REST

Authentification machine-à-machine via clé API (OUTBOX_API_KEY dans .env) :

X-API-Key: votre-cle-secrete
# ou
Authorization: Bearer votre-cle-secrete

Générer une clé : openssl rand -hex 32 puis docker compose up -d backend

Méthode Endpoint Description
GET /api/outbox Lister les fichiers disponibles
GET /api/outbox/{filename}/meta Métadonnées d'un fichier
GET /api/outbox/{filename}/download Télécharger le fichier
DELETE /api/outbox/{filename} Supprimer après consommation

Codes de réponse

CodeSignification
200Succès
400Nom de fichier invalide
401Authentification manquante ou clé incorrecte
404Fichier indisponible

En-têtes du téléchargement

  • Content-Disposition — nom du fichier
  • Content-Length — taille en octets
  • X-RTS-Scan-Id — identifiant du scan
  • X-RTS-Delivered-At — horodatage de mise à disposition

Exemples curl

Remplacez votre-cle-secrete par la valeur de OUTBOX_API_KEY.

Lister les fichiers

curl -s \
  -H "X-API-Key: votre-cle-secrete" \
  "{{BASE}}/api/outbox"

Métadonnées

curl -s \
  -H "X-API-Key: votre-cle-secrete" \
  "{{BASE}}/api/outbox/video.mp4/meta"

Télécharger

curl -L \
  -H "X-API-Key: votre-cle-secrete" \
  -O -J \
  "{{BASE}}/api/outbox/video.mp4/download"

Supprimer après traitement

curl -s -X DELETE \
  -H "X-API-Key: votre-cle-secrete" \
  "{{BASE}}/api/outbox/video.mp4"

Workflow complet

API_KEY="votre-cle-secrete"
BASE="{{BASE}}"

curl -s -H "X-API-Key: ${API_KEY}" "${BASE}/api/outbox" | jq .

curl -L -H "X-API-Key: ${API_KEY}" -O -J \
  "${BASE}/api/outbox/video.mp4/download"

curl -s -X DELETE -H "X-API-Key: ${API_KEY}" \
  "${BASE}/api/outbox/video.mp4"

Purge quotidienne (23h59)

Chaque soir à 23h59 (fuseau TZ, défaut Europe/Zurich), le conteneur cron-purge supprime :

  • Fichiers dans /data/outbox et leurs .meta.json
  • Données de suivi et aperçus dans /data/uploads
  • Quarantaine et métadonnées de scan

Configuration

VariableDescription
APP_URLURL publique de l'application (liens de téléchargement outbox pour la méthode « lien »)
OUTBOX_DIRDossier de sortie (défaut /data/outbox)
OUTBOX_API_KEYClé API pour l'app consommatrice et les URLs de téléchargement Erizos (méthode lien)
ERIZOS_SECRETS_KEYClé AES-256 pour chiffrer les mots de passe MediaHub (.erizos-servers.json)
SESSION_SECRETSecret de session (fallback si ERIZOS_SECRETS_KEY absent)
QUARANTINE_DIRQuarantaine (défaut /data/quarantine)
TZFuseau horaire de la purge
UPLOAD_UID / UPLOAD_GIDPropriétaire des fichiers (SMB)