Projet

Général

Profil

Development #33739

rechercher les utilisateurs via un attribut

Ajouté par Benjamin Dauvergne il y a presque 5 ans. Mis à jour il y a presque 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
06 juin 2019
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

L'idée serait de pouvoir lier un utilisateur existant via un attribut, dans l'idée de pouvoir faire la liaison avec par exemple un provisionning externe (LDAP ou autre).


Fichiers

0002-adapters-factorize-user-linking-33739.patch (2,94 ko) 0002-adapters-factorize-user-linking-33739.patch Benjamin Dauvergne, 06 juin 2019 14:24
0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch (2,6 ko) 0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch Benjamin Dauvergne, 06 juin 2019 14:24
0003-add-user-lookup-by-attributes-33739.patch (17,2 ko) 0003-add-user-lookup-by-attributes-33739.patch Benjamin Dauvergne, 06 juin 2019 14:24
0002-adapters-factorize-user-linking-33739.patch (2,94 ko) 0002-adapters-factorize-user-linking-33739.patch Benjamin Dauvergne, 06 juin 2019 15:20
0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch (2,6 ko) 0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch Benjamin Dauvergne, 06 juin 2019 15:20
0003-add-user-lookup-by-attributes-33739.patch (18,4 ko) 0003-add-user-lookup-by-attributes-33739.patch Benjamin Dauvergne, 06 juin 2019 15:20
0002-adapters-factorize-user-linking-33739.patch (2,94 ko) 0002-adapters-factorize-user-linking-33739.patch Benjamin Dauvergne, 06 juin 2019 16:03
0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch (2,6 ko) 0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch Benjamin Dauvergne, 06 juin 2019 16:03
0003-add-user-lookup-by-attributes-33739.patch (18,5 ko) 0003-add-user-lookup-by-attributes-33739.patch Benjamin Dauvergne, 06 juin 2019 16:03
0002-adapters-factorize-user-linking-33739.patch (3,11 ko) 0002-adapters-factorize-user-linking-33739.patch Benjamin Dauvergne, 06 juin 2019 17:09
0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch (2,6 ko) 0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch Benjamin Dauvergne, 06 juin 2019 17:09
0003-add-user-lookup-by-attributes-33739.patch (18,5 ko) 0003-add-user-lookup-by-attributes-33739.patch Benjamin Dauvergne, 06 juin 2019 17:09
0002-adapters-factorize-user-linking-33739.patch (3,11 ko) 0002-adapters-factorize-user-linking-33739.patch Benjamin Dauvergne, 07 juin 2019 08:15
0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch (2,6 ko) 0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch Benjamin Dauvergne, 07 juin 2019 08:15
0004-adapters-abstract-user-queryset-33739.patch (2,07 ko) 0004-adapters-abstract-user-queryset-33739.patch Benjamin Dauvergne, 07 juin 2019 08:15
0003-add-user-lookup-by-attributes-33739.patch (18,5 ko) 0003-add-user-lookup-by-attributes-33739.patch Benjamin Dauvergne, 07 juin 2019 08:15
0002-adapters-factorize-user-linking-33739.patch (3,11 ko) 0002-adapters-factorize-user-linking-33739.patch Benjamin Dauvergne, 11 juin 2019 16:36
0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch (2,6 ko) 0001-simplify-workflow-in-DefaultAdapter.lookup_user-3373.patch Benjamin Dauvergne, 11 juin 2019 16:36
0004-adapters-abstract-user-queryset-33739.patch (2,09 ko) 0004-adapters-abstract-user-queryset-33739.patch Benjamin Dauvergne, 11 juin 2019 16:36
0003-add-user-lookup-by-attributes-33739.patch (18,5 ko) 0003-add-user-lookup-by-attributes-33739.patch Benjamin Dauvergne, 11 juin 2019 16:36

Révisions associées

Révision e0c1f5b4 (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

simplify workflow in DefaultAdapter.lookup_user() (#33739)

Révision f2908b2e (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

adapters: factorize user linking (#33739)

Révision 31015e65 (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

add user lookup by attributes (#33739)

Révision 81ab8f4c (diff)
Ajouté par Benjamin Dauvergne il y a presque 5 ans

adapters: abstract user queryset (#33739)

Historique

#2

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

Un petit mot dans le README sur ce qui est attendu dans LOOKUP_BY_ATTRIBUTES et le fonctionnement associé ? (ça faciliterait en autres la relecture).

#3

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Emmanuel Cazenave a écrit :

Un petit mot dans le README sur ce qui est attendu dans LOOKUP_BY_ATTRIBUTES et le fonctionnement associé ? (ça faciliterait en autres la relecture).

Oui, oui, je voulais voir d'abord si ça buildait en python3, comme je suis en sid je n'ai pas de paquet python3-lasso malheureusement, faudrait un paquet pour buster.

#5

Mis à jour par Serghei Mihai il y a presque 5 ans

Documenter aussi l'option ignore-case dans les lookups.

#7

Mis à jour par Emmanuel Cazenave il y a presque 5 ans

A titre indicatif, le _link_user est utilisé qu'un fois, et je trouve pas que ça rende le truc plus clair, je comprendrai mieux un truc comme ça :

        provisionning = False
        if not user:
            if not utils.get_setting(idp, 'PROVISION'):
                self.logger.debug('provisionning disabled, login refused')
                return None
            provisionning = True
            user = self.create_user(User)

        saml_id, link_created = models.UserSAMLIdentifier.objects.get_or_create(
            name_id=name_id, issuer=issuer, defaults={'user': user})

        if not provisionning:
            return user

        if user != saml_id.user:
            self.logger.info('looked up user %s with name_id %s from issuer %s',
                             user, name_id, issuer)
            user.delete()
            return saml_id.user

        try:
            self.finish_create_user(idp, saml_attributes, user)
        except UserCreationError:
            user.delete()
            return None
        self.logger.info('created new user %s with name_id %s from issuer %s',
                                 user, name_id, issuer)
        return user

#8

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Emmanuel Cazenave a écrit :

A titre indicatif, le _link_user est utilisé qu'un fois, et je trouve pas que ça rende le truc plus clair, je comprendrai mieux un truc comme ça :

[...]

Hmm y a pas le code de lookup_by_attributes là, ça donnerait quoi avec ? Parce que finish_create_user faut pas le faire avec le lookup.

#9

Mis à jour par Thomas Noël il y a presque 5 ans

Au niveau de 0002, on a un real_user et un user, c'est real_user qu'on a retourner à la fin donc c'est sur lui qu'il faut jouer le finish_create_user :

    user = self.create_user(User)
    real_user = self._link_user(idp, saml_attributes, issuer, name_id, user)*
    if user != real_user:
         ....
    else:
             self.finish_create_user(idp, saml_attributes, user)    <-- c'est plutôt real_user qu'il faut jouer

    return real_user

Ou alors, plus lisible pour moi, ça serait :

    user = self.create_user(User)
    real_user = self._link_user(idp, saml_attributes, issuer, name_id, user)*
    if user != real_user:
         user.delete()
         return real_user 

    ... et on continue sur "user" ensuite, on parle plus de son jumeau real_user

    return user

Globalement, quand tout est ok (utilisateur retrouvé via nameid), je ferais plutôt des logs de niveau debug, par exemple à la place de ce logger.info :

            self.logger.info('looked up user %s with name_id %s from issuer %s',
                             user, name_id, issuer)

#11

Mis à jour par Frédéric Péters il y a presque 5 ans

Oui, oui, je voulais voir d'abord si ça buildait en python3, comme je suis en sid je n'ai pas de paquet python3-lasso malheureusement, faudrait un paquet pour buster.

Pourtant https://packages.debian.org/search?keywords=python3-lasso ?

#12

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Ah ben je sais juste pas utiliser apt, un -t testing m'a sauvé, merci.

#13

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

  • Description mis à jour (diff)
#14

Mis à jour par Thomas Noël il y a presque 5 ans

Question que je me pose : et si l'utilisateur obtenu via lookup_by_attributes est déjà référencé dans un UserSAMLIdentifier (c'est-à-dire déjà fédéré avec un autre name_id) ? Je serais dans ce cas pour ne pas le prendre en compte. C'est à dire, au lieu de juste :

users_found = User.objects.filter(**{key: value})

faire :

users_found = User.objects.filter(saml_identifiers=None, **{key: value})
#16

Mis à jour par Frédéric Péters il y a presque 5 ans

En passant, authentic2-auth-fedict définit aussi son Adapter, qui passe par lookup_user, rien de bien particulier, et pas un soucis si le comportement ne change pas du tout. (ce dont je ne suis pas tout à fait sûr)

~~

pour abstraire le queryset des utilisateurs

Plus clair si c'est appelé get_users_queryset que get_queryset, je trouve.

#17

Mis à jour par Benjamin Dauvergne il y a presque 5 ans

Frédéric Péters a écrit :

En passant, authentic2-auth-fedict définit aussi son Adapter, qui passe par lookup_user, rien de bien particulier, et pas un soucis si le comportement ne change pas du tout. (ce dont je ne suis pas tout à fait sûr)

a2-auth-fedict dépend du comportement normal avec provisionning si on ne définit pas de raccordement par attribut ça doit marcher comme avant.

Plus clair si c'est appelé get_users_queryset que get_queryset, je trouve.

Ok.

#18

Mis à jour par Thomas Noël il y a presque 5 ans

Tu renommes le "get_users_queryset" ? Et ça devrait être ok selon moi.

#20

Mis à jour par Thomas Noël il y a presque 5 ans

  • Statut changé de Solution proposée à Solution validée
#21

Mis à jour par Thomas Noël il y a presque 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 81ab8f4c9ee816f4fe066b4d74989915a76bc401
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Jun 6 22:52:22 2019 +0200

    adapters: abstract user queryset (#33739)

commit 31015e6580b4f7ca300c66f880ae8b281a18a883
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Jun 6 13:52:21 2019 +0200

    add user lookup by attributes (#33739)

commit f2908b2ef30d249a496b441235f5e7fad3887cd7
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Jun 6 10:59:28 2019 +0200

    adapters: factorize user linking (#33739)

commit e0c1f5b43cbcd5c2dfe6c73ad4cab65a715d6988
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Thu Jun 6 10:12:14 2019 +0200

    simplify workflow in DefaultAdapter.lookup_user() (#33739)

#22

Mis à jour par Frédéric Péters il y a presque 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF