Projet

Général

Profil

Bug #22755

lingo: échec à la récupération de l'utilisateur local par son username

Ajouté par Serghei Mihai il y a environ 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
22 mars 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Dans lingo/models.py le passage:

            try:
                user = User.objects.get(username=uuid)
            except User.DoesNotExist:
                continue

ne trouve aucun usager puisque uuid, retournée par passerelle est sur 32 caractères.
Or les objets User provisionnés ont le username sur 30 caractères.

En conséquence aucun utilisateur n'est notifié de ces factures en cours.


Fichiers

Révisions associées

Révision d560d5ff (diff)
Ajouté par Serghei Mihai il y a environ 6 ans

lingo: search user by SAML name_id on remote invoices notifying (#22755)

Historique

#1

Mis à jour par Serghei Mihai il y a environ 6 ans

#2

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

On n'a pas mieux à faire que parsemer des [:30] dans le code ?

Là c'est quand même terrible, on se trouve avec un lien famille initié depuis Combo, qui envoie l'uuid complet à 32 caractères, qui est stocké dans Passerelle, mais en retour quand Passerelle le rend Combo est tout perdu.

#3

Mis à jour par Serghei Mihai il y a environ 6 ans

Le problème de fond dans les connecteurs famille dans passerelle est que la correspondance entre une famille et un user se fait par son nameid, stocké dans une colonne de la table.
On devrait profiter du provisionning pour plutôt relier la famille à l'objet User, retrouvé par son nameid.

Mais là, on deplace le [:30] dans les vues de liaison/deliaison.

Et le jour on ou passe définitivement à Django 1.11 et on n'aura plus la contrainte de 30 caractères sur le username il faudrait repasser sur toutes les vues qui le tronquent.

#4

Mis à jour par Thomas Noël il y a environ 6 ans

(vu de loin) ce qui semble quand même bizarre, c'est que Combo connait l'UUID complet (il l'envoie à Passerelle). Y'a un truc qu'on rate à un moment, non ?

#5

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

(vu de loin) ce qui semble quand même bizarre, c'est que Combo connait l'UUID complet (il l'envoie à Passerelle). Y'a un truc qu'on rate à un moment, non ?

C'était bien là mon commentaire, dans requests_wrapper.py, pour passer NameID, ou dans urls.py, pour avoir user_nameid, on a le code pour l'avoir sur 32 caractères (parce que c'est le name_id saml qui est sorti de mellon).

Mais ici, on se base sur l'attribut username, coupé à 30 caractères lors du provisionning (par hobo, parce que contrainte django).

Alors soit il est également utilisé la version 30 au moment de la création du lien famille (mais ça casserait de l'existant), soit il est également utilisé la version 32 au moment de la récupération des factures. Prendre la version 32 et la couper à 30 caractères, non.

#6

Mis à jour par Thomas Noël il y a environ 6 ans

Pour info, dans lingo y'a déjà des « user = UserSAMLIdentifier.objects.get(name_id=name_id).user »

#7

Mis à jour par Serghei Mihai il y a environ 6 ans

Thomas Noël a écrit :

Pour info, dans lingo y'a déjà des « user = UserSAMLIdentifier.objects.get(name_id=name_id).user »

Idéalement, j'aurais préféré ne pas rajouter une dependance de mellon ici, mais c'est l'option la moins intrusive dans les deploiements existants.

#8

Mis à jour par Thomas Noël il y a environ 6 ans

Serghei Mihai a écrit :

Thomas Noël a écrit :

Pour info, dans lingo y'a déjà des « user = UserSAMLIdentifier.objects.get(name_id=name_id).user »

Idéalement, j'aurais préféré ne pas rajouter une dependance de mellon ici, mais c'est l'option la moins intrusive dans les deploiements existants.

Dans lingo/views.py on utilise déjà mellon pour chercher l'uuid pour interroger Passerelle pour les factures.

Et le code de link de la cellule famille utilise combo.utils.requests qui passe par user.saml_identifiers.first().name_id

Dans les deux cas, on est déjà mellonisé.

#9

Mis à jour par Serghei Mihai il y a environ 6 ans

Ok.
Je trouve utile quand même de chercher aussi dans User si mellon n'est pas chargé ou s'il n'y a pas de fédération encore avec combo.

#10

Mis à jour par Thomas Noël il y a environ 6 ans

Serghei Mihai a écrit :

Ok.
Je trouve utile quand même de chercher aussi dans User si mellon n'est pas chargé ou s'il n'y a pas de fédération encore avec combo.

Pour moi c'est un cas qui n'existe pas et n'existera pas (voir le reste du code de combo et lingo, on n'utilise toujours le name_id saml vers passerelle, jamais le username). Je pense que ton code serait plus simple sans, surtout qu'ici tu ne fais pas la troncature à de l'uuid cherché 30... donc ça n'a vraiment aucun usage.

#12

Mis à jour par Thomas Noël il y a environ 6 ans

C'est pas terrible ça :

        for uuid, items in pending_invoices.iteritems():
            if UserSAMLIdentifier is None:
                continue
            ...

parce que clairement si UserSAMLIdentifier est None, le for ne sert à rien... et donc la fonction notify_new_remote_invoices devrait juste commencer par un simple if UserSAMLIdentifier is None: return avec un petit commentaire au dessus genre "# remote invoices needs SAML" ou quelque chose de plus clair mais moi et l'anglais, voilà.

(En "protection" et pour clarifier un peu la situation, je me dis que get_remote_pending_invoices pourrait aussi avoir ce if UserSAMLIdentifier is None: return {}, histoire de montrer que là aussi, sans SAML ce principe des factures distantes par usager n'a pas de sens)

Enfin, le message de commit lingo: fix user searching by username je verrais plutôt @lingo: use SAML name_id while searching remote invoice users" ou quelque chose de mieux dit en anglais, t'as pigé l'idée (je suis pas fan des "fix foobar" qui ne veulent pas dire grand chose)

#14

Mis à jour par Thomas Noël il y a environ 6 ans

Ack

#15

Mis à jour par Serghei Mihai il y a environ 6 ans

  • Statut changé de En cours à Résolu (à déployer)
commit d560d5ff81317db050aaa7bb9590fd758547a65f (origin/master)
Author: Serghei Mihai <smihai@entrouvert.com>
Date:   Tue Nov 14 18:48:44 2017 +0100

    lingo: search user by SAML name_id on remote invoices notifying (#22755)
#16

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