Development #58226
faire qu'un GET sur un trigger renvoie un 404 s'il n'existe pas
0%
Description
Dans le but de vérifier qu'un saut par déclencheur est disponible sur une demande donnée, on pourrait avoir la méthode OPTIONS disponible :
OPTIONS /<slug-demarche>/<numero-de-demande>/jump/trigger/<declencheur>/ HTTP/1.1 HTTP/1.1 204 No Content Allow: OPTIONS, POST ...
Cela permettrait notamment à un système externe de paiement de paiement (combo/lingo) de savoir qu'une demande liée à un élément de panier est bien toujours en attente de paiement.
(ce ticket pour discuter de l'idée... qui ne me semble pas très complexe à implémenter)
Fichiers
Demandes liées
Révisions associées
Historique
Mis à jour par Thomas Noël il y a plus de 2 ans
- Lié à Development #58210: ne pas permettre le paiement si la demande correspondante n'existe plus ajouté
Mis à jour par Frédéric Péters il y a plus de 2 ans
Si je comprends bien c'est parce que ça va faire actuellement une 403, (je regarde juste le trigger action globale),
if not get_request().get_method() == 'POST': raise errors.AccessForbiddenError('must be POST')
mais ça donne donc : si ça n'existe pas 404, si ça existe mais appel pas POST 403, si existe et POST déclenchement.
Il n'y aurait pas suffisamment ici pour détecter, du coup ? (faire != 404).
~~
Ok sur l'action de saut par contre, la méthode est vérifiée avant d'avoir vérifié l'existence du trigger correspondant, ce qui demanderait alors pour avoir le même comportement :
--- a/wcs/wf/jump.py +++ b/wcs/wf/jump.py @@ -71,9 +71,6 @@ class TriggerDirectory(Directory): if get_request().is_json(): get_response().set_content_type('application/json') - if not get_request().get_method() == 'POST': - raise errors.AccessForbiddenError() - signed_request = is_url_signed() user = get_user_from_api_query_string() or get_request().user for item in self.wfstatus.items: @@ -82,6 +79,8 @@ class TriggerDirectory(Directory): if not hasattr(item, 'trigger'): continue if component == item.trigger: + if not get_request().get_method() == 'POST': + raise errors.AccessForbiddenError() if signed_request and not item.by: pass elif not item.check_auth(self.formdata, user):
(pas testé).
Mis à jour par Thomas Noël il y a plus de 2 ans
- Sujet changé de avoir la méthode OPTIONS sur les url de trigger jump/trigger à faire qu'un GET sur un trigger renvoie un 404 s'il n'existe pas
Ouaip (j'avais imaginé ça, "faire un GET sur le déclencheur"), je n'avais juste pas très envie de jouer sur un effet de bord, mais ça pourrait rouler comme ça et rester clair dans combo/lingo.
Je modifie le titre du ticket.
Actuellement donc :- un GET va renvoyer un 404 sur un trigger d'action globale, c'est ok pour ça
- un GET va renvoyer un 403 sur un déclencheur de saut même si le trigger n'existe pas, et il faut corriger ça : renvoyer 403 seulement si le trigger existe, et sinon 404.
Mis à jour par Thomas Noël il y a plus de 2 ans
- Fichier 0001-wf-jump-respond-404-on-non-existing-trigger-on-all-H.patch 0001-wf-jump-respond-404-on-non-existing-trigger-on-all-H.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Solution proposée à Solution validée
Mis à jour par Thomas Noël il y a plus de 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 949d9ecfbb8b41fc2c7e119895de80eeb087680b Author: Thomas NOEL <tnoel@entrouvert.com> Date: Wed Oct 27 16:29:20 2021 +0200 wf/jump: respond 404 on non-existing trigger, on all HTTP methods (#58226)
Mis à jour par Frédéric Péters il y a plus de 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
wf/jump: respond 404 on non-existing trigger, on all HTTP methods (#58226)