# Gestion des sous domaines ## Opérations de mise à jour La route /api/subdomains permet les opérations suivantes : * Get : Récupère les sous-domaines existants * Post : Créé un nouveau sous domaine, et l'active éventuellement (selon que la prop `active` soit true ou non) * Put : Permet l'activation d'un sous-domaine en passant la propriété `active=true` Une organisation est limitée à 3 sous-domaines. Un sous-domaine ne peut être modifié une fois créé, à l'exception de son statut (actif / inactif) Quand un sous domaine est ajouté, il est ajouté au fichier bind des serveurs prod-back et vpn (cf. plus bas). Quand un sous domaine est activé, les opérations suivantes sont réalisées : * les autres sous-domaines de l'organisation sont désactivés, de manière à ne conserver qu'un seul sous-domaine actif à la fois * une commande de mise à jour est envoyée à typo3 via l'API Http * le nom de l'admin de l'organisation est mis à jour pour être de la forme 'admin' * un email de confirmation est envoyé à la structure ## CLI On peut ajouter et activer un nouveau sous-domaine au moyen de la commande : php bin/console ot:subdomain:add ## Fichier Bind ### Le fichier bind Le fichier "bind" rend possible la résolution des sous-domaines au niveau du serveur DNS (situé sur prod-back). Chaque fois qu'un nouveau sous-domaine est enregistré, ce fichier doit être mis à jour. Cependant, pour des questions de droits, c'est l'utilisateur root qui doit procéder à cette mise à jour. La mise à jour des deux fichiers bind est nécessaire, pour permettre la prise en compte des sous-domaines depuis l'intérieur ou l'extérieur du VPN. ### Comment ça marche Voilà ce qu'il se passe lorsqu'une structure enregistre un nouveau sous-domaine depuis *prod-back* ou *prod-v2* : 1. Le logiciel ajoute le sous-domaine en question dans une nouvelle ligne du fichier tampon `/env/subdomain.txt` 2. Un cron tourne toutes les 5 minutes et exécute le script `/env/rsync-subdomain`. Celui-ci : * consomme le contenu du fichier `/env/subdomain.txt` * l'ajoute aux fichiers `/env/subdomain.txt` présents sur *prod-front* et *vpn* * puis vide le fichier `/env/subdomain.txt` qu'il vient de consommer. 3. Un nouveau cron tourne ensuite toutes les 5 minutes sur *prod-front* et *vpn*, et exécute le script `/env/add-subdomain`. Celui ci : * consomme le contenu du fichier `/env/subdomain.txt` * met à jour le fichier bind `/etc/bind/zones/opentalent.fr.db` * puis vide le fichier `/env/subdomain.txt` qu'il vient de consommer. ![diagram](images/diagram_subdomains.png)