Projet

Général

Profil

Bug #90085

403 sur appel d'une action global paramétrée en API ouverte, en recette.

Ajouté par Nicolas Roche il y a 10 jours. Mis à jour il y a 8 jours.

Statut:
Solution déployée
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
26 avril 2024
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non

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

Révision a88ff444 (diff)
Ajouté par Frédéric Péters il y a 8 jours

workflows: consider empty list when checking for permission (#90085)

Historique

#1

Mis à jour par Nicolas Roche il y a 10 jours

  • Assigné à mis à Nicolas Roche

(je creuse...)

#2

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.

#3

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.

#4

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

#5

Mis à jour par Nicolas Roche il y a 10 jours

  • Assigné à Nicolas Roche supprimé

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)

#6

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.

#7

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 ?

#8

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

#9

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 ?

#10

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)

#11

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 ?

#12

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

#13

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.

#14

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

#15

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 :

#16

Mis à jour par Robot Gitea il y a 10 jours

  • Statut changé de En cours à Solution proposée
#17

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 :

#18

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 :

#19

Mis à jour par Transition automatique il y a 8 jours

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF