Bug #6172
get_user_from_api_query_string() should not always raise
0%
Description
The following commit broke expectations in categories_json()
, that if no user is found from the API query string, it returns None so that the web-service has an anonymous mode.
commit 3074204f09d7595d472cd9af1f8beda2ea5d5e61 Author: Benjamin Dauvergne <bdauvergne@entrouvert.com> Date: Thu Sep 18 11:51:54 2014 +0200 Make get_user_from_api_query_string() report detailed errors when signature checking fails (refs #5536)
The attached patch add a raise_on_error
parameter to get_user_from_api_query_string()
.
Fichiers
Historique
Mis à jour par Thomas Noël il y a plus de 9 ans
- utilisation des listes /?format=json ou /categories?format=json depuis un webservice depuis un portail tiers, avec url signée (blurps)
- si l'utilisateur n'est pas connecté sur le portail tiers, le nameid va être vide, et le wcs actuel crashe (raise / erreur 500)
- résultat final, on a une erreur sur le portail ... alors qu'avant, on avait la liste "anonyme".
Le patch proposé permet, sur les URLs qui peuvent être accédées anonymement, de ne pas planter si le nameid est vide (ou autre erreur d'url signée), et de considérer plutôt qu'il s'agit d'un accès anonyme.
Et donc pour moi , ack pour ce patch qui gère /categories?format=json (liste des catégories) ; je serais partant pour régler aussi le /?format=json (liste des formulaires).
Mis à jour par Frédéric Péters il y a plus de 9 ans
Je ne suis pas fan de la manière dont c'est écrit parce que ça rend un git annotate difficile; je verrais plutôt la fonction actuelle renommée, comme ça elle garde son indentation, et la nouvelle get_user_from_api_query_string(raise_on_error=True) appelerait ce code, avec le try/except.
Mis à jour par Thomas Noël il y a plus de 9 ans
(remarque marginale : le raise semble renvoyer un 500 alors que dans ce cas on devrait plutôt faire du 400)
Mis à jour par Thomas Noël il y a plus de 9 ans
- Fichier 0001-Add-no-raising-mode-to-get_user_from_api_query_strin.patch 0001-Add-no-raising-mode-to-get_user_from_api_query_strin.patch ajouté
patch refait selon la demande de Fred, et j'y ajoute la gestion de /?format=json en mode anonyme.
Mis à jour par Frédéric Péters il y a plus de 9 ans
C'est ok (mais je me demande maintenant quand même si le comportement attendu de la fonction, sur un message signé correctement mais avec NameID= vide, ne serait pas de retourner None, en toute situation).
Mis à jour par Thomas Noël il y a plus de 9 ans
Frédéric Péters a écrit :
C'est ok (mais je me demande maintenant quand même si le comportement attendu de la fonction, sur un message signé correctement mais avec NameID= vide, ne serait pas de retourner None, en toute situation).
Ah oui... c'est assez facile à patcher/expliquer/documenter, effectivement.
Mis à jour par Thomas Noël il y a plus de 9 ans
- Fichier 0001-api-if-no-NameID-or-email-get_user-returns-None-6172.patch 0001-api-if-no-NameID-or-email-get_user-returns-None-6172.patch ajouté
- Assigné à changé de Benjamin Dauvergne à Thomas Noël
patch testé en vrai, works (mais livré sans test unitaire, exercice laissé au lecteur)
Mis à jour par Frédéric Péters il y a plus de 9 ans
Bon bon; le lecteur verra plus tard pour ajouter un test :)
Mis à jour par Thomas Noël il y a plus de 9 ans
- Statut changé de Nouveau à Résolu (à déployer)
Poussé.
commit 22c96b7c1f3b1c61ae7e118dd7ccd0d721c62fe9 Author: Thomas NOEL <tnoel@entrouvert.com> Date: Thu Dec 18 14:49:34 2014 +0100 api: if no NameID or email, get_user returns None (#6172)