Projet

Général

Profil

Bug #6172

get_user_from_api_query_string() should not always raise

Ajouté par Benjamin Dauvergne il y a plus de 9 ans. Mis à jour il y a plus de 9 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
17 décembre 2014
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

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

#1

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

Cas d'usage (en français) :
  • 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).

#2

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.

#3

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)

#4

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

patch refait selon la demande de Fred, et j'y ajoute la gestion de /?format=json en mode anonyme.

#5

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).

#6

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.

#7

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

patch testé en vrai, works (mais livré sans test unitaire, exercice laissé au lecteur)

#8

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 :)

#9

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)
#10

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

  • Statut changé de Résolu (à déployer) à Fermé

Formats disponibles : Atom PDF