TypeError lors de déconnection #20

Closed
opened 2021-09-20 12:59:23 +02:00 by dlesbre · 4 comments
dlesbre commented 2021-09-20 12:59:23 +02:00 (Migrated from git.eleves.ens.fr)

On peut la trigger à partir de https://git.eleves.ens.fr/dlesbre/48h-des-jeux/-/tree/bug en se connectant via un compte clipper (le mien était superuser mais je doute que ça influe) puis en se déconnectant (via le lien du site).

On obtient le traceback suivant:

Internal Server Error: /authens/logout
Traceback (most recent call last):
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/utils/decorators.py", line 43, in _wrapper
    return bound_method(*args, **kwargs)
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/contrib/auth/views.py", line 119, in dispatch
    next_page = self.get_next_page()
  File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/authens/views.py", line 150, in get_next_page
    next_page = urlunparse(
  File "/usr/lib/python3.9/urllib/parse.py", line 501, in urlunparse
    return _coerce_result(urlunsplit((scheme, netloc, url, query, fragment)))
  File "/usr/lib/python3.9/urllib/parse.py", line 513, in urlunsplit
    url = '//' + (netloc or '') + url
TypeError: can only concatenate str (not "NoneType") to str
[20/Sep/2021 12:53:14] "GET /authens/logout HTTP/1.1" 500 99672
On peut la trigger à partir de https://git.eleves.ens.fr/dlesbre/48h-des-jeux/-/tree/bug en se connectant via un compte clipper (le mien était superuser mais je doute que ça influe) puis en se déconnectant (via le lien du site). On obtient le traceback suivant: ``` Internal Server Error: /authens/logout Traceback (most recent call last): File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 70, in view return self.dispatch(request, *args, **kwargs) File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/utils/decorators.py", line 43, in _wrapper return bound_method(*args, **kwargs) File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func response = view_func(request, *args, **kwargs) File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/django/contrib/auth/views.py", line 119, in dispatch next_page = self.get_next_page() File "/home/dorian/Programs/kde/48h-des-jeux/venv/lib/python3.9/site-packages/authens/views.py", line 150, in get_next_page next_page = urlunparse( File "/usr/lib/python3.9/urllib/parse.py", line 501, in urlunparse return _coerce_result(urlunsplit((scheme, netloc, url, query, fragment))) File "/usr/lib/python3.9/urllib/parse.py", line 513, in urlunsplit url = '//' + (netloc or '') + url TypeError: can only concatenate str (not "NoneType") to str [20/Sep/2021 12:53:14] "GET /authens/logout HTTP/1.1" 500 99672 ```
mpepin commented 2021-09-20 13:09:20 +02:00 (Migrated from git.eleves.ens.fr)

Yo, je ne suis pas sûr d'avoir le temps de tester dans un délais court, mais si quelqu'un veut regarder, je suppose que next_page vaut None à cette ligne dans ton exemple: f24395ea41/authens/views.py (L142)

Si c'est le cas, ça veut dire que None est le « cas de base » de la vue LogoutView dont on hérite et qu'on devrait juste renvoyer ce None pour mimer le comportement de la superclasse. Un fix raisonnable me semble être:

-        if self.cas_connected:
+        if self.cas_connected and next_page is not None:

À confirmer par un test et une seconde paire d'yeux.

Yo, je ne suis pas sûr d'avoir le temps de tester dans un délais court, mais si quelqu'un veut regarder, je suppose que `next_page` vaut None à cette ligne dans ton exemple: https://git.eleves.ens.fr/klub-dev-ens/authens/-/blob/f24395ea41a1373c2e4e1c4cbd903f98f97b4c36/authens/views.py#L142 Si c'est le cas, ça veut dire que `None` est le « cas de base » de la vue `LogoutView` dont on hérite et qu'on devrait juste renvoyer ce `None` pour mimer le comportement de la superclasse. Un fix raisonnable me semble être: ```diff - if self.cas_connected: + if self.cas_connected and next_page is not None: ``` À confirmer par un test et une seconde paire d'yeux.
mpepin commented 2021-10-02 17:11:04 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in merge request !34

mentioned in merge request !34
mpepin commented 2021-10-02 17:11:33 +02:00 (Migrated from git.eleves.ens.fr)

Bon en fait c'était pas malin ça ↑
Il faut quand même rediriger vers la page de logout du CAS, hopefully !34 règle le problème de façon plus intelligente.

Bon en fait c'était pas malin ça ↑ Il faut quand même rediriger vers la page de logout du CAS, hopefully !34 règle le problème de façon plus intelligente.
thubrecht commented 2021-10-03 17:50:10 +02:00 (Migrated from git.eleves.ens.fr)

mentioned in commit 22b4d440c3

mentioned in commit 22b4d440c3ddfafdcdf0617bebb4ab27c97efde6
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: DGNum/authens#20
No description provided.