FrançaisEnglish

Guardian

Contrôle d'accès pour Plex, un serveur multimédia auto-hébergé : approbation des appareils, règles par utilisateur et coupure des sessions non conformes.

Mise en contexte

Application full TypeScript : backend NestJS et frontend Next.js réunis dans une seule image Docker, avec pipeline GitHub Actions (lint, typecheck, tests, couverture) et une trentaine de versions publiées. L'image cumule plus de 60 000 pulls sur Docker Hub, et les bugs et les demandes remontés par les utilisateurs orientent les versions suivantes.

Technologies et outils utilisés

Backend & données

L'API REST et un cron NestJS interrogent Plex et coupent les sessions, avec TypeORM au-dessus de SQLite.

Frontend

Une console d'administration, doublée d'un portail où les utilisateurs Plex voient leurs propres appareils.

Sécurité & contrôle d'accès

Les règles combinent l'état de l'appareil, des plages horaires, des accès temporaires, une limite de streams simultanés et des listes CIDR IPv4/IPv6.

Notifications

Les notifications sont envoyées par SMTP ou via Apprise.

Déploiement & intégration continue

Le frontend et le backend sont regroupés dans une seule image, publiée sur Docker Hub à chaque version une fois le lint, le typecheck et les tests passés.

Défis rencontrés

  • Retrouver l'IP réelle du client derrière un proxy inverse.
  • Combiner le réglage global et les exceptions par utilisateur en une seule décision par session.
  • Passer de deux conteneurs à une image unique sans casser les installations existantes.

Aperçu du projet

Appareils par utilisateur, avec leur état d'approbation
Flux en cours avec qualité, progression et appareil
Portail où un utilisateur consulte ses appareils
Historique des sessions consultable
Gestion des appareils dans Guardian
Sessions Plex en cours
Portail utilisateur Guardian
Historique des sessions

Code source

github.com/HydroshieldMKII/Guardian

Voir le dépôt