Project

General

Profile

Développement #90465

erreurs 400 sur la récupération des PDF des factures

Added by Nicolas Roche 9 months ago. Updated 7 months ago.

Status:
Fermé
Priority:
Normal
Assignee:
Target version:
-
Start date:
10 May 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No


Related issues

Related to Combo - Bug #11033: gérer les problèmes de connecteur dans ItemDownloadViewFermé24 May 2016

Actions
Related to Combo - Développement #79939: lingo: pouvoir télécharger l'attestation de paiement d'une factureFermé21 July 2023

Actions
Related to Combo - Développement #91259: Ne pas logger d'erreur quand le PDF d'une facture n'est simplement pas disponible dans la situation actuelleFermé29 May 2024

Actions

Associated revisions

Revision ad679621 (diff)
Added by Nicolas Roche 7 months ago

toulouse_maelis: catch extra parameters on pdf invoice endpoint (#90465)

Revision 0379c541 (diff)
Added by Nicolas Roche 7 months ago

toulouse-axel: catch extra parameters on pdf invoice endpoint (#90465)

Revision 83351957 (diff)
Added by Nicolas Roche 7 months ago

caluire-axel: catch extra parameters on pdf invoice endpoint (#90465)

History

#1

Updated by Nicolas Roche 9 months ago

Le wrapper combo ajoute un paramètre 'email' quand les usagers ne sont pas authentifiés.
Ce paramètre n'est pas définis par les endpoints des derniers connecteurs qui renvoient des factures PDF à lingo.

#2

Updated by Robot Gitea 9 months ago

  • Tracker changed from Support to Développement
  • Status changed from Nouveau to Solution proposée

Nicolas Roche (nroche) a ouvert une pull request sur Gitea concernant cette demande :

#3

Updated by Frédéric Péters 9 months ago

Le wrapper combo ajoute un paramètre 'email' quand les usagers ne sont pas authentifiés.

Mais le problème serait alors/aussi au niveau de la construction des portails, les cellules affichant des factures ne devraient pas être affichées à des usagers non connectés. ?

#4

Updated by Frédéric Péters 9 months ago

Et c'est quel parcours qui donnerait à l'usager un lien https://site/lingo/item/5/xxx/yyy/pdf alors que l'usager n'est pas connecté ? Cela me parait très curieux, et à creuser davantage.

#5

Updated by Nicolas Roche 8 months ago

Mais le problème serait alors/aussi au niveau de la construction des portails, les cellules affichant des factures ne devraient pas être affichées à des usagers non connectés. ?

Oui, je pense que les factures ne doivent pas être affichées à des usagers non-connectés.
Concernant parsifal c'est bien le cas : la page et la cellule requièrent toutes les deux le rôle "Adulte avec DUI".
https://famille-loisirs.eservices.toulouse-metropole.fr/manage/pages/32/#open:lingo_invoicescell-1-visibility

Et c'est quel parcours qui donnerait à l'usager un lien https://site/lingo/item/5/xxx/yyy/pdf alors que l'usager n'est pas connecté ? Cela me parait très curieux, et à creuser davantage.

Je reproduis en supprimant mes cookies et donc je pense à des personnes qui laisseraient leur ordinateur allumé avec un onglet sur les factures.
Maintenant que tu me poses la question, je me dis que ça fait beaucoup d'erreurs pour un parcours qui ne doit pas arriver souvent.
J'essaye de trouver un meilleurs parcours qui explique ces erreurs.

#6

Updated by Nicolas Roche 8 months ago

D'après les traces (reçues par mail) ça me semble bien lié à l'absence de cookies :
#7

Updated by Benjamin Dauvergne 8 months ago

Nicolas Roche a écrit :

D'après les traces (reçues par mail) ça me semble bien lié à l'absence de cookies :

Oui c'est exactement ça, ton analyse est la bonne. Ça me semble indiquer que forcer une authentification sur combo.apps.lingo.views.ItemDownloadView serait une bonne idée, je ne vois aucun cas où le PDF est visible et un utilisateur connecté; il y a le cas de cellule SelfInvoiceView mais elle ne doit justement rien rapporter à part le montant et certainement pas la facture.

À vrai dire le cas est quasiment déjà traité correctement dans le code il faudrait juste faire taire les erreurs.

        if data.status_code != 200:
            logging.error(self.log_error, data.status_code)
            messages.error(request, self.message_error)
            if self.request.headers.get('Referer'):
                return HttpResponseRedirect(self.request.headers.get('Referer'))
            return HttpResponseRedirect('/')

et ça donne aussi cette trace encore plus obscure justement et qui a été mise sous le tapis: https://sentry.entrouvert.org/entrouvert/publik/issues/62635/
#8

Updated by Benjamin Dauvergne 8 months ago

  • Related to Bug #11033: gérer les problèmes de connecteur dans ItemDownloadView added
#9

Updated by Benjamin Dauvergne 8 months ago

  • Related to Développement #79939: lingo: pouvoir télécharger l'attestation de paiement d'une facture added
#10

Updated by Benjamin Dauvergne 8 months ago

  • Related to Développement #91259: Ne pas logger d'erreur quand le PDF d'une facture n'est simplement pas disponible dans la situation actuelle added
#11

Updated by Frédéric Péters 8 months ago

absence de cookies

Sans session côté combo, pour le téléchargement d'une facture je vois combo faire :

        try:
            data = regie.get_invoice_pdf(
                request.user,

avec get_invoice_pdf qui est :

    def get_invoice_pdf(self, user, invoice_id, payer_external_id=None, payments_certificate=False):
        """ 
        downloads item's file
        """ 
        if self.is_remote() and user:
            url = self.webservice_url + '/invoice/%s/' % invoice_id
            (...)

il me semble que la volonté là serait que sans user il ne devrait pas y avoir d'appel; sauf que ça va se taper AnonymousUser qui va être évalué comme étant ok et faire l'appel qui échoue ici.

Il y a semble-t-il quelque chose à remonter et corriger là, et ça ferait que cette situation côté passerelle n'arriverait pas.

#12

Updated by Benjamin Dauvergne 8 months ago

Frédéric Péters a écrit :

Il y a semble-t-il quelque chose à remonter et corriger là, et ça ferait que cette situation côté passerelle n'arriverait pas.

Coté passerelle il semble il y avoir les validations nécessaires qui font que ça finit en 400 je trouve ça propre. On peut continuer sur #91259 concernant combo. Au final je n'ai pas l'impression qu'il y ait quelque chose à corriger ici dans combo passerelle, on va transformer des 400 pour paramètre invalide en 404 mais ça n'apportera rien d'utile pour le code appelant. Je relis quand même la PR.

#13

Updated by Robot Gitea 8 months ago

  • Status changed from Solution proposée to En cours

Benjamin Dauvergne (bdauvergne) a relu et demandé des modifications sur une pull request sur Gitea concernant cette demande :

#14

Updated by Robot Gitea 7 months ago

  • Status changed from En cours to Solution proposée
#15

Updated by Robot Gitea 7 months ago

  • Status changed from Solution proposée to Solution validée
#16

Updated by Nicolas Roche 7 months ago

  • Status changed from Solution validée to Solution proposée
#18

Updated by Robot Gitea 7 months ago

Nicolas Roche (nroche) a demandé une relecture de Benjamin Dauvergne (bdauvergne) sur une pull request sur Gitea concernant cette demande :

#19

Updated by Robot Gitea 7 months ago

  • Status changed from Solution proposée to Solution validée

Benjamin Dauvergne (bdauvergne) a approuvé une pull request sur Gitea concernant cette demande :

#20

Updated by Robot Gitea 7 months ago

  • Status changed from Solution validée to Résolu (à déployer)

Benjamin Dauvergne (bdauvergne) a mergé une pull request sur Gitea concernant cette demande :

#21

Updated by Robot Gitea 7 months ago

Nicolas Roche (nroche) a mergé une pull request sur Gitea concernant cette demande :

#22

Updated by Transition automatique 7 months ago

  • Status changed from Résolu (à déployer) to Solution déployée
#23

Updated by Transition automatique 5 months ago

Automatic expiration

Also available in: Atom PDF