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
- JWT & Passport
- bcrypt
- Helmet
- Rate limiting & CAPTCHA
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
Code source
github.com/HydroshieldMKII/Guardian