Bug #90085
403 sur appel d'une action global paramétrée en API ouverte, en recette.
0%
Description
Vu sur le connecteur Maélis.
In [25]: logs = ResourceLog.objects.filter(appname='toulouse-maelis', slug='maelis', message__contains='/hooks') In [26]: [(x.extra.get('response_headers', {}).get('date'), x.extra.get('response_content')) for x in logs1] ... ('Fri, 26 Apr 2024 12:19:49 GMT', '{"err": 1, "err_class": "Access denied", "err_desc": "insufficient roles"}'),
L'action globale est paramétrée avec :
https://demarches-parsifal.test.entrouvert.org/backoffice/workflows/131/global-actions/3/
Rôles requis pour déclencher via un appel HTTP : Aucun (API ouverte)
(comme en production où l'on n'a pas l'erreur)
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a 10 jours
Le message "API ouverte" doit être faux, et il doit y avoir un contrôle d'accès, ça a peut-être évolué avec le temps mais ça serait une bonne chose, on ne veut pas d'API ouverte.
Mis à jour par Frédéric Péters il y a 10 jours
En fait non, j'imagine que passerelle signe l'appel, et dans ce cas on contrôle ce qui est spécifié :
if not ('_signed_calls' in self.trigger.roles and is_url_signed()): raise errors.AccessForbiddenError('insufficient roles')
bref c'est "API ouverte mais il ne faut pas signer les appels pour que ça soit le cas", éventuellement ici le commentaire levé pourrait être différent pour le cas où il n'y a rien dans trigger.roles, si tu veux faire ce patch.
Mis à jour par Nicolas Roche il y a 10 jours
- Statut changé de Nouveau à En cours
J'ai modifié le déclencheur pour prendre les appels signés aux API.
J'ai relancé le trigger et c'est passé.
(Je modifie la PROD en conséquence, merci Fred. )
Mis à jour par Nicolas Roche il y a 10 jours
- Assigné à
Nicolas Rochesupprimé
J'ai mis à jour Allo-Toulouse également (en préventif, je n'aurais peut-être pas du)
https://demarches-montoulouse.test.entrouvert.org/backoffice/workflows/73/global-actions/17/
https://demarches-montoulouse.eservices.toulouse-metropole.fr/backoffice/workflows/91/global-actions/17/
(je regarde si je comprend tout bien avant de me lancer dans le patch)
Mis à jour par Nicolas Roche il y a 10 jours
- Statut changé de En cours à Nouveau
J'abandonne ici.
Le code a changé avec #88875 et n'est plus vraiment adaptable pour préciser le message d'erreur.
Perso, j'aurais plutôt accepté les appels signés sur l'API ouverte, pour ne pas introduire de régression.
Mis à jour par Frédéric Péters il y a 10 jours
pour ne pas introduire de régression
Il faut préciser de quoi tu parles; veux-tu dire que le code de #88875 a modifié un comportement ?
Mis à jour par Nicolas Roche il y a 10 jours
Non, #88875 n'était pas encore déployé quand j'ai ouvert ce ticket à propos de la régression (ici maelis, puis famille #90089).
Pardon d'embrouiller le ticket, je voulais juste dire que la version actuelle du code déporte la détection des erreurs
et que je ne me voyais pas ajouter la détection d'un cas d'erreur en dehors.
if not self.trigger.check_executable(self.formdata, user): raise errors.AccessForbiddenError('insufficient roles')
Mis à jour par Frédéric Péters il y a 10 jours
ticket à propos de la régression
pourquoi parles-tu de régression, quel moment as-tu identifié où c'était ok et puis plus ok ?
Mis à jour par Nicolas Roche il y a 10 jours
J'ai reçu dans les traces la 403 (que j'aurais du noter dans le ticket).
https://sentry.entrouvert.org/entrouvert/publik/issues/124145/
C'était la même que celle donnée dans #90089.
En recette les appels aux triggers qui passaient avant ne passeraient plus.
https://sentry.entrouvert.org/entrouvert/publik/issues/?query=hook
En prod, ça passe encore.
(édit: à quel moment -> Apr 26, 2024 11:19:43 AM UTC)
Mis à jour par Frédéric Péters il y a 10 jours
https://sentry.entrouvert.org/entrouvert/publik/issues/124145/
Il est marqué que ça commence "April 26 2024 13:19:43 CEST"; la release contenant #88875 (et autres) est tagguée à 11:11, déployée un peu après (notée déployée par scrutiny à 12:17.
Non, #88875 n'était pas encore déployé
Tu es vraiment sûr ?
Mis à jour par Nicolas Roche il y a 10 jours
Non, pardon. Je n'avais pas l'info de scrutiny
(et je n'ai pas reproduis pour pouvoir trouver le commit qui introduirait la régression).
Mis à jour par Frédéric Péters il y a 10 jours
Bref, c'est sans doute bel et bien #88875, qui remplace :
- if self.trigger.roles: (...) + if self.roles is None: + return True
et ça doit passer à côté du cas liste vide.
Mis à jour par Frédéric Péters il y a 10 jours
Je n'avais pas l'info de scrutiny.
C'est l'heure à laquelle #88875#note-8, le ticket en question est marqué déployé.
Mis à jour par Robot Gitea il y a 10 jours
- Statut changé de Nouveau à En cours
- Assigné à mis à Frédéric Péters
Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/1444
- Titre : WIP: workflows: consider empty list when checking for permission (#90085)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/1444/files
Mis à jour par Robot Gitea il y a 9 jours
- Statut changé de Solution proposée à Solution validée
Lauréline Guérin (lguerin) a approuvé une pull request sur Gitea concernant cette demande :
Mis à jour par Robot Gitea il y a 8 jours
- Statut changé de Solution validée à Résolu (à déployer)
Frédéric Péters (fpeters) a mergé une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/1444
- Titre : workflows: consider empty list when checking for permission (#90085)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/1444/files
Mis à jour par Transition automatique il y a 8 jours
- Statut changé de Résolu (à déployer) à Solution déployée
workflows: consider empty list when checking for permission (#90085)