= Description = Re2o est l'outils de gestion du réseau utilisé au Crans. Il est développé par plusieurs associations de Federez, le dépôt principal est [[https://gitlab.federez.net/federez/re2o|ici]]. Les serveurs crans pull depuis un dépot sur notre gitlab, qui à vocation à être uniquement un miroir et à ne pas servir au dev. On est pas branché directement sur le dépôt federez pour ne pas être dépendant d'eux, et pour des raisons de sécurité (les dépots sont auto pullé régulièrement). = Qu'est ce que c'est ? = C'est une application Django, qui gère toute la BDD. On peut découper le système en plusieurs partie: * la bdd postgres, sur {{{thot}}} * Le serveur re2o, qui tourne via apache * Un serveur ldap, dont les infos sont exporté par django grâce à django-ldapdb * des services clients, qui se connecte via une API rest pour récupérer les infos pertinentes, cf [[CransTechnique/Services/Re2oServices|re2o-services]] = Comment ça marche = On trouve des infos générique sur le [[https://gitlab.federez.net/federez/re2o|wiki]] re2o. Une doc [[http://www.sphinx-doc.org/en/master/ | sphinx]] est disponnible pour l'instant sur le site du rezo-metz : [[https://re2o-dev.rezometz.org/docs/ | ici ]] * '''TODO :''' Vérifier qu'elle est à jour, et mettre en place une doc crans. * '''TODO :''' Faire une doc fonctionnelle. [[attachment:re2o.png]] = Guidelines = On ne touche pas à l'instance de prod sur le serveur {{{re2o}}} ! Il y a un ensemble de 4 serveur pour les tests et le dev. == Comment contribuer ? == Se référer au phabricator, rubrique re2o : https://phabricator.crans.org/tag/crans_technique/ == Quand il s'agit de frontend web == Se référer aux guidelines générales du projet. Les consignes de base : respecter un minimum la pep8, documenter dans une docstring ce que font vos fonctions/classes/etc (en utilisant la syntaxe sphinx) == Quand il s'agit de scripts == 3 cas se présentent : === Ces scripts sont portables upstream pour re2o (ex chsh.py...) et font des écritures ldap ou des actions ponctuelles === Dans ce cas, il est préférable de les transformer en commande manage.py. Se référer à la doc django idoine. N'oubliez pas dans ce cas de ne rien laisser de trop crans related. On les écrit dans le dépôt re2o. === Ces scripts sont trop cranso-cranseux === On les écrit alors dans /usr/scripts/re2o. On importe l'environnement re2o comme par exemple au début de ce script : https://gitlab.crans.org/nounous/re2o/blob/master/freeradius_utils/auth.py === Il s'agit de la régénération régulière d'un service (dhcp, dns...) === A ce moment là, on l'intègre dans les [[CransTechnique/Services/Re2oServices|re2o-services]] avec un dépot à part qui utilise l'api client et est régénéré régulièrement par cron quand il le faut. = Détails Cranseux = Même si on essaye de faire le plus agnostique et indépendant des spécificités du Crans, y a quelques fois des problèmes spécifiques. == Mot de passe == Dans l'ancienne base, on avait plusieurs type de mot de passe, dont les formats peuvent être parmi: {{{ {SSHA}mVL66OPbX3/3x2cBMxcqZvD/GTjurZDt {crypt}$1$LJgKu7e6$eNGbVZvS7HpwBuFHIsfuA1 {crypt}KkF/pf0w8TlCE {SMD5}p5AZuAUEG3cWOQUj3cS101fgsh0= }}} Tout ces formats de hash sont pourris, il faut lancer une migration. Le problème, c'est qu'il faut prévenir les gens longtemps à l'avance, et faire l'opération tranquillement. Une option est de faire une transition smooth, où à chaque fois qu'un user se log, on en profite pour upgrade son algo de chiffrement. Lors de la migration, on a fait en sorte de migrer tous les formats, et il a donc fallu que re2o supporte tous les formats. L'un des problèmes est que nos mot de passe sont de la forme {{{hash(sel+pass)}}}, alors que django par défault fait du {{{hash(pass+sel}}}}. Il a donc fallu recoder des [[https://docs.djangoproject.com/en/2.0/topics/auth/passwords/|hasher dajngo]] pour supporter nos formats. Cf {{{re2o/re2o/login.py}}} pour les hasher. Dans la base django, les mot de passe doivent être de la forme : {{{ {SSHA}$mVL66OPbX3/3x2cBMxcqZvD/GTjurZDt {crypt}$1$LJgKu7e6$eNGbVZvS7HpwBuFHIsfuA1 {crypt}$KkF/pf0w8TlCE {SMD5}$p5AZuAUEG3cWOQUj3cS101fgsh0= }}} On a donc rajouté un {{{$}}} à l'import quand c'était nécéssaire. Maintenant, il faut refaire l'opération inverser pour export vers la base ldap, donc retiré le {{{$}}} en trop quand il le faut, pour ça en se base sur la longueur du hash pour redétecter le cas du {{{{crypt}$KkF/pf0w8TlCE}}}, cf {{{ldap_sync}}} dans {{{re2o/users/models.py}}} ---- CatégoriePagePublique