Bug #21888
agent authentic : prendre email/first_name/last_name de l'hobo.json
0%
Description
Pour le moment ça prend l'username depuis l'hobo.json mais prend nom et email via settings.ADMINS[0]
, c'est curieux.
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 6 ans
- Lié à Development #21882: Création un super-utilisateur sur authentic2 ajouté
Mis à jour par Anonyme il y a environ 6 ans
- Fichier 0001-authentic-agent-use-email-first_name-last_name-from-.patch 0001-authentic-agent-use-email-first_name-last_name-from-.patch ajouté
- Catégorie mis à agent
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
- Assigné à mis à Anonyme
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
À mon avis il faut reprendre le code du début:
# create hobo users in authentic to bootstrap (don't update them, # hobo is not a provisioning system) for user_dict in hobo_environment.get('users'): user, created = get_user_model().objects.get_or_create( username=user_dict.get('username')) if created: for key, value in user_dict.items(): setattr(user, key, value) user.is_staff = True user.is_superuser = True try: admin_name, admin_email = settings.ADMINS[0] except (IndexError, ValueError): admin_name, admin_email = ('Super Publik', 'admin@entrouvert.org') if not user.email: user.email = admin_email if not user.first_name and not user.last_name: # give a name as it's required by some SP user.first_name = admin_name user.save()
Le get_or_create(username...get('username'))
me parait tout à fait casse gueule, sans username on ne devrait rien créer, et donc pas de .get() ici.
Ensuite donc comme le username on est sûr d'en avoir un, on devrait s'en servir plus loin plutôt que admin_name (ou alors bêtement mettre 'last_name' c'est toujours moins perturbant je trouve que de trouver un le nom d'un compte qui n'a rien à voir).
Évitons d'écrire 4 fois hobo_environment.get('users')[0]
et créons une variable.
Mis à jour par Anonyme il y a environ 6 ans
- Fichier 0001-authentic-agent-refactored-hobo_deploy-command-to-ge.patch 0001-authentic-agent-refactored-hobo_deploy-command-to-ge.patch ajouté
- Echéance mis à 02 mars 2018
Deuxième version :
- J'ai gardé get_or_create pour garder le non-doublonnage des comptes utilisateurs existants.
- j'ai créé certaines variables
Mis à jour par Frédéric Péters il y a environ 6 ans
# get_or_create is used bootstrap hobo from a hobo.json config
(to bootstrap) mais surtout je ne trouve pas le commentaire très clair. Et c'est à essayer de comprendre que je note la suppression du précédent, "create hobo users in authentic to bootstrap (don't update them,
hobo is not a provisioning system)", et ce passage est important, hobo(-deploy) n'est pas un système de provisionning, on ne doit pas oublier ça, et c'est ça qui justifie le get_or_create, mais surtout le "if created:" derrière.
if not user.first_name: user.first_name = username if not user.last_name: user.last_name = username
Le code précédent posait juste user.first_name, ça reste suffisant.
Mais aussi, plutôt que cette condition "if created", simplement passer les attributs dans le defaults=... du get_or_create.
- admin_name, admin_email = settings.ADMINS[0]
Ce passage supprimé est important, il permet à hobo à l'extérieur d'Entr'ouvert d'utiliser une adresse email pertinente par défaut; la valeur par défaut mise dans user_dict.get('email', 'admin@entrouvert.org')
ne devrait pas être figée ainsi, devrait être tirée de settings.ADMINS.
Mis à jour par Anonyme il y a environ 6 ans
Mis à jour par Frédéric Péters il y a environ 6 ans
Le message de commit est trop long/mal formaté.
Mis à jour par Frédéric Péters il y a environ 6 ans
Mais aussi, plutôt que cette condition "if created", simplement passer les attributs dans le defaults=... du get_or_create.
Par là j'imaginais plutôt un code ainsi :
for user_dict in hobo_environment.get('users'): # create hobo users in authentic to bootstrap # (don't update them, hobo is not a provisioning system) if not user_dict.get('email'): # get an email for settings, or default to system try: user_dict['email'] = settings.ADMINS[0][1] except (IndexError, ValueError): user_dict['email'] = 'root@localhost' if not (user_dict.get('first_name') or user_dict.get('last_name')): # some SP require a name user_dict['first_name'] = user_dict['username'] user_dict['is_staff'] = True user_dict['is_superuser'] = True user, created = get_user_model().objects.get_or_create( defaults=user_dict, username=user_dict.get('username'))
Et s'arrêter là, pas de condition derrière.
Mais ok, une fois le message arrangé.
Mis à jour par Benjamin Dauvergne il y a environ 6 ans
J'ai toujours du mal avec ça username=user_dict.get('username'))
.
Mis à jour par Anonyme il y a environ 6 ans
- Fichier 0001-authentic-hobo_deploy-use-username-email-first_name-.patch ajouté
J'ai toujours du mal avec ça
username=user_dict.get('username'))
.
Je m'explique même si je préfère l'idée de fred qui n'a plus ce get('username') :
- Comme username a la contrainte NOT NULL, un user_dict.get('username') qui renverrait None ne trouvera rien dans la base et va créer un utilisateur, qui va être ensuite initialisé avec un
Hop nouveau patch joint, avec l'algo de fred, qui permet une requête de moins dans la base, et ya moins de if, plus élégant.
Mis à jour par Anonyme il y a environ 6 ans
- Fichier
0001-authentic-hobo_deploy-use-username-email-first_name-.patchsupprimé
Mis à jour par Anonyme il y a environ 6 ans
Mis à jour par Anonyme il y a environ 6 ans
- Statut changé de En cours à Résolu (à déployer)
commit 67e421e2dbf7bfb761a0eb07130f7e8796d36738 Author: Elias Showk <eshowk@entrouvert.com> Date: Fri Feb 23 17:11:12 2018 +0100 authentic hobo_deploy use email and first_name from hobo.json and settings.ADMINS for superusers (#21888)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
authentic hobo_deploy use email and first_name from hobo.json and settings.ADMINS for superusers (#21888)