Project

General

Profile

Development #96114

lingo: vérifier que user est authentifié avant de construire des urls pour récupérer des factures

Added by Lauréline Guérin 5 days ago. Updated about 21 hours ago.

Status:
Solution proposée
Priority:
Normal
Target version:
-
Start date:
30 September 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:
No

Description

Par exemple ici:

    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
            if payments_certificate:
                url += 'payments/'
            url += 'pdf/'
            if payer_external_id:
                url += '?payer_external_id=%s' % payer_external_id
            return requests.get(
                url,
                user=user if not payer_external_id else None,
                without_user=bool(payer_external_id),
                remote_service='auto',
                cache_duration=0,
            )
        raise PermissionDenied

user peut être non null mais non authentifié (AnonymousUser); ce qui produira un appel pour récupérer la facture pdf, et côté lingo ça donne des sentry comme celle-ci:
https://sentry.entrouvert.org/entrouvert/publik/issues/129678/
Où on voit dans l'url un ?NameID=&email=&orig=mes-demarches.nimes.fr: pas de NameId.

Cette requête n'aurait pas dû être produite et combo aurait dû lancer un PermissionDenied.

Note:
Je pense que le user a un onglet ouvert avec la liste de ses factures, il oublie cet onglet, il clique sur un lien "télécharger" alors que sa session a expiré; la vue ItemDownloadView n'est pas décorée pour requérir une authentification, elle compte sur get_invoice_pdf pour lui signifier que ça n'est pas possible:

        try:
            data = regie.get_invoice_pdf(
                request.user,
                item_id,
                payer_external_id=payer_external_id,
                payments_certificate=self.payments_certificate,
            )
        except PermissionDenied:
            return HttpResponseForbidden()

History

#1

Updated by Robot Gitea about 21 hours ago

  • Status changed from Nouveau to Solution proposée

Lauréline Guérin (lguerin) a ouvert une pull request sur Gitea concernant cette demande :

Also available in: Atom PDF