Projet

Général

Profil

Development #34008

UnicodeDecodeError avec nom d'utilisateur non ascii

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

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

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

Description

MELLON_USERNAME_TEMPLATE = '{attributes[first_name][0]}.{attributes[last_name][0]}'

et utilisateur qui s'appellerait Thomas Noël, ça crash au moment du login sur une instruction de logging, à cause du tréma sur le e.

Request Method: POST
Request URL: http://127.0.0.1:8003/accounts/mellon/login/

Django Version: 1.8.19
Python Version: 2.7.15
Installed Applications:
('django.contrib.contenttypes',
 'django.contrib.auth',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'watson',
 'autocomplete_light',
 'django.contrib.admin',
 'django_tables2',
 'django_journal',
 'crispy_forms',
 'docbow_project.humantime',
 'docbow_project.docbow',
 'docbow_project.pfwb',
 'mellon')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'docbow_project.docbow.middleware.KeepUserAroundMiddleware',
 'django_journal.middleware.JournalMiddleware',
 'watson.middleware.SearchContextMiddleware')

Traceback:
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  89.         return handler(request, *args, **kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/views.py" in post
  135.             return self.sso_success(request, login)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/views.py" in sso_success
  196.         return self.authenticate(request, login, attributes)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/views.py" in authenticate
  199.         user = auth.authenticate(saml_attributes=attributes)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in authenticate
  74.             user = backend.authenticate(**credentials)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/backends.py" in authenticate
  21.             user = adapter.lookup_user(idp, saml_attributes)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/mellon/adapters.py" in lookup_user
  146.                                  user, name_id, issuer)
File "/usr/lib/python2.7/logging/__init__.py" in info
  1174.             self._log(INFO, msg, args, **kwargs)
File "/usr/lib/python2.7/logging/__init__.py" in _log
  1293.         self.handle(record)
File "/usr/lib/python2.7/logging/__init__.py" in handle
  1303.             self.callHandlers(record)
File "/usr/lib/python2.7/logging/__init__.py" in callHandlers
  1343.                     hdlr.handle(record)
File "/usr/lib/python2.7/logging/__init__.py" in handle
  766.                 self.emit(record)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/entrouvert/logging/handlers.py" in emit
  22.         source_msg = self.format(record)
File "/usr/lib/python2.7/logging/__init__.py" in format
  741.         return fmt.format(record)
File "/usr/lib/python2.7/logging/__init__.py" in format
  465.         record.message = record.getMessage()
File "/usr/lib/python2.7/logging/__init__.py" in getMessage
  329.             msg = msg % self.args

Exception Type: UnicodeDecodeError at /accounts/mellon/login/
Exception Value: 'ascii' codec can't decode byte 0xc3 in position 26: ordinal not in range(128)

Fichiers

0001-use-unicode_literals-34008.patch (12,3 ko) 0001-use-unicode_literals-34008.patch Benjamin Dauvergne, 14 juin 2019 15:14
0001-use-unicode_literals-34008.patch (12,6 ko) 0001-use-unicode_literals-34008.patch Benjamin Dauvergne, 14 juin 2019 15:28
0001-use-unicode_literals-34008.patch (17,6 ko) 0001-use-unicode_literals-34008.patch Benjamin Dauvergne, 18 juin 2019 22:46
0001-use-unicode_literals-34008.patch (17,6 ko) 0001-use-unicode_literals-34008.patch Benjamin Dauvergne, 19 juin 2019 12:53
0001-use-unicode_literals-34008.patch (20,8 ko) 0001-use-unicode_literals-34008.patch Benjamin Dauvergne, 04 juillet 2019 13:15

Révisions associées

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

use unicode_literals (#34008)

Historique

#2

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

  • Assigné à mis à Benjamin Dauvergne
#3

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

Le seul cas problématique c'est quand on passe des valeurs à lasso qui n'aime pas trop l'unicode en python2.

#4

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

Benjamin Dauvergne a écrit :

Le seul cas problématique c'est quand on passe des valeurs à lasso qui n'aime pas trop l'unicode en python2.

Pour Lasso ça ne pose souci que quand on passe une liste, un tuple ou un dico, les chaînes littérales pourvu qu'elles soient encodables en ASCII ça va.

#5

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

Utiliser str() est une meilleure idée que b''.

#6

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

La source du problème c'est l'utilisation de six.python_2_unicode_compatible qui fait que __str__ renvoie de l'utf-8 maintenant alors qu'avant ça renvoyait de l'unicode; c'est une source de problèmes différents mais ça nous rend plus prêt d'un passage à python3.

#7

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

  • Sujet changé de UnicodeDecodeError sur journalisation à UnicodeDecodeError avec nom d'utilisateur non ascii

Ça pète maintenant un peu plus loin.

Environment:

Request Method: POST
Request URL: http://127.0.0.1:8003/accounts/mellon/login/

Django Version: 1.8.19
Python Version: 2.7.15
Installed Applications:
('django.contrib.contenttypes',
 'django.contrib.auth',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'watson',
 'autocomplete_light',
 'django.contrib.admin',
 'django_tables2',
 'django_journal',
 'crispy_forms',
 'docbow_project.humantime',
 'docbow_project.docbow',
 'docbow_project.pfwb',
 'mellon')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'docbow_project.docbow.middleware.KeepUserAroundMiddleware',
 'django_journal.middleware.JournalMiddleware',
 'watson.middleware.SearchContextMiddleware')

Traceback:
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  71.             return self.dispatch(request, *args, **kwargs)
File "/home/cazino/envs/docbow-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  89.         return handler(request, *args, **kwargs)
File "/home/cazino/src/django-mellon/mellon/views.py" in post
  152.             return self.sso_success(request, login)
File "/home/cazino/src/django-mellon/mellon/views.py" in sso_success
  184.                     content = ''.join(content)

Exception Type: UnicodeDecodeError at /accounts/mellon/login/
Exception Value: 'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)
#9

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

Ça casse autre chose maintenant (sur une install publik-devinst, sans le MELLON_USERNAME_TEMPLATE = '{attributes[first_name][0]}.{attributes[last_name][0]}')

(pas testé le cas original)

C'est peut-être trop radical de passer tout le package à unicode_literals non ? (C'est un peu ce qui se raconte là :https://python-future.org/unicode_literals.html)

Environment:

Request Method: GET
Request URL: https://combo.dev.publik.love/accounts/mellon/login/?SAMLart=AAQAAA3DX2fh%2FZYaEJ6kxSg28Zi1TZdIRDNFRUVEODMwQzAyQUYxMEU4NUQ%3D&RelayState=9e765ef5-9b60-4039-85d2-71ac8f9998ca

Django Version: 1.11.18
Python Version: 2.7.16
Installed Applications:
''
Installed Middleware:
''

Traceback:

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
  249.             response = self._get_response(request)

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/home/cazino/envs/publik-env/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/home/cazino/src/django-mellon/mellon/views.py" in get
  389.             return self.continue_sso_artifact(request, lasso.HTTP_METHOD_ARTIFACT_GET)

File "/home/cazino/src/django-mellon/mellon/views.py" in continue_sso_artifact
  368.             return self.sso_success(request, login)

File "/home/cazino/src/django-mellon/mellon/views.py" in sso_success
  202.                     content = ''.join(lasso_decode(content.decode))

Exception Type: AttributeError at /accounts/mellon/login/
Exception Value: 'list' object has no attribute 'decode'
#10

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

Mais non c'est moi qui ai fait une type pourrie (content.decode).

#11

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

Et ça marche ? (j'arrête de faire la petite main testeuse).

#12

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

Voilà avec des tests pour que tu puisses vérifier via coverage que tout passe.

#13

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

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

Testé manuellement les deux cas qui plantaient, ça marche.

#14

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

  • Statut changé de Solution validée à Résolu (à déployer)
commit ab92ca9a076326d3b8a56999945893135b2c9edd
Author: Benjamin Dauvergne <bdauvergne@entrouvert.com>
Date:   Fri Jun 14 15:13:54 2019 +0200

    use unicode_literals (#34008)
#15

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