Projet

Général

Profil

Bug #21888

agent authentic : prendre email/first_name/last_name de l'hobo.json

Ajouté par Frédéric Péters il y a environ 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
agent
Version cible:
-
Début:
15 février 2018
Echéance:
02 mars 2018
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

Lié à Publik Installation Développeur - Development #21882: Création un super-utilisateur sur authentic2Fermé15 février 2018

Actions

Révisions associées

Révision 67e421e2 (diff)
Ajouté par Elias Showk il y a environ 6 ans

authentic hobo_deploy use email and first_name from hobo.json and settings.ADMINS for superusers (#21888)

Historique

#1

Mis à jour par Frédéric Péters il y a environ 6 ans

#2

Mis à jour par Anonyme il y a environ 6 ans

#3

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.

#4

Mis à jour par Anonyme il y a environ 6 ans

Deuxième version :

- J'ai gardé get_or_create pour garder le non-doublonnage des comptes utilisateurs existants.
- j'ai créé certaines variables

#5

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.

#7

Mis à jour par Frédéric Péters il y a environ 6 ans

Le message de commit est trop long/mal formaté.

#8

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é.

#9

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

J'ai toujours du mal avec ça username=user_dict.get('username')).

#10

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.

#11

Mis à jour par Anonyme il y a environ 6 ans

  • Fichier 0001-authentic-hobo_deploy-use-username-email-first_name-.patch supprimé
#13

Mis à jour par Benjamin Dauvergne il y a environ 6 ans

Ack.

#14

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)

#15

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

Formats disponibles : Atom PDF