Projet

Général

Profil

Development #48136

auth_fc : variation sur django.contrib.auth.hashers.is_password_usable entre django 1.11 et django 2 fait planter les tests

Ajouté par Paul Marillonnet il y a plus de 3 ans. Mis à jour il y a plus de 3 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Version cible:
-
Début:
30 octobre 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non


Fichiers

Révisions associées

Révision 7e013975 (diff)
Ajouté par Benjamin Dauvergne il y a plus de 3 ans

misc: set unusable password on federated users (#48136)

Historique

#1

Mis à jour par Paul Marillonnet il y a plus de 3 ans

#2

Mis à jour par Paul Marillonnet il y a plus de 3 ans

Oups, des trucs en cache local pas inclus dans le commit. Corrigé ici.

#3

Mis à jour par Thomas Noël il y a plus de 3 ans

Je trouverais plus clair (et plus propre) de commencer plutôt par un « if not super().has_usable_password(): return False » qu'on comprenne qu'on ajoute juste des vérifications en plus. Non ?

#4

Mis à jour par Paul Marillonnet il y a plus de 3 ans

Thomas Noël a écrit :

Je trouverais plus clair (et plus propre) de commencer plutôt par un « if not super().has_usable_password(): return False » qu'on comprenne qu'on ajoute juste des vérifications en plus. Non ?

Ok très bien.

#5

Mis à jour par Thomas Noël il y a plus de 3 ans

Paul Marillonnet a écrit :

Thomas Noël a écrit :

Je trouverais plus clair (et plus propre) de commencer plutôt par un « if not super().has_usable_password(): return False » qu'on comprenne qu'on ajoute juste des vérifications en plus. Non ?

Ok très bien.

Heu, pourquoi ça devient deux patches ?

Et ma proposition c'était de remplacer le « if (self.password is None or self.password.startswith(UNUSABLE_PASSWORD_PREFIX)): return False » par le super.

Mais bon en vrai je ne comprends pas très bien pourquoi on veut modifier ça. Suivre Django me semblerait une meilleure idée (et donc comprendre pourquoi ils ont fait évoluer leur code)

#6

Mis à jour par Paul Marillonnet il y a plus de 3 ans

  • Statut changé de Solution proposée à En cours
  • Patch proposed changé de Oui à Non

Thomas Noël a écrit :

Heu, pourquoi ça devient deux patches ?

Je voyais pas ce que la correction sur is_authenticated avait en rapport, mais ok je peux tout regrouper.

Et ma proposition c'était de remplacer le « if (self.password is None or self.password.startswith(UNUSABLE_PASSWORD_PREFIX)): return False » par le super.

Ok mais le souci c'est qu'en django 2 le is_password_usable (appelé par django.contrib.auth.AbstractBaseUser) change et devient :

def is_password_usable(encoded):
    """ 
    Return True if this password wasn't generated by
    User.set_unusable_password(), i.e. make_password(None).
    """ 
    return encoded is None or not encoded.startswith(UNUSABLE_PASSWORD_PREFIX)
ce qui justement ne nous convient pas dans la partie FC d'A2.

Mais bon en vrai je ne comprends pas très bien pourquoi on veut modifier ça. Suivre Django me semblerait une meilleure idée (et donc comprendre pourquoi ils ont fait évoluer leur code)

Et donc oui ok je suis d'accord, je vais retrouver le ticket côté django pour comprendre ce qui se trame derrière ce changement.

#7

Mis à jour par Paul Marillonnet il y a plus de 3 ans

Paul Marillonnet a écrit :

Et donc oui ok je suis d'accord, je vais retrouver le ticket côté django pour comprendre ce qui se trame derrière ce changement.

C'est https://code.djangoproject.com/ticket/28718. Ce qui plante c'est que Django 2 considère qu'un mot de passe valant None est utilisable car il n'est pas l'image de User.set_unusable_password().
Il faut corriger ça dans a2.

#8

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

Ok donc ce qu'il faut :
1. faire le tour des endroits où on crée un utilisateur sans mot de passe, et y ajouter un .set_unusable_password()
2. une migration pour faire set_unusable_password() sur tous les utilisateurs avec un mot de passe vide

Pour rester concentrer sur auth_fc on peut ne le faire que dans son cas ici et ouvrir un ticket plus large ensuite (mais je pense que ça concerne uniquement auth_saml, auth_oidc, auth_ldap et éventuellement authentic2-beid qu'il faut regarder). Ça concerne aussi django-mellon.

#9

Mis à jour par Frédéric Péters il y a plus de 3 ans

authentic2-beid qu'il faut regarder

non ce module est obsolète.

#10

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

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

authentic2-beid qu'il faut regarder

non ce module est obsolète.

Ok, authentic2-auth-fedict.

#11

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

  • Assigné à mis à Benjamin Dauvergne
#14

Mis à jour par Serghei Mihai il y a plus de 3 ans

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

Mis à jour par Benjamin Dauvergne il y a plus de 3 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 7e013975f70a227256335d7de9cc3396f0137d35
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Tue Nov 3 09:54:41 2020 +0100

    misc: set unusable password on federated users (#48136)
#16

Mis à jour par Frédéric Péters il y a plus de 3 ans

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

Formats disponibles : Atom PDF