Bug #64460
vue paiement direct vs élément déjà payé
0%
Description
Une vue type /lingo/item/MTUwOQ.1ngWle.9GXe4Ug1vxNNuF2qrHW61O2z2Vw/pay, prévue pour du paiement direct, sans panier.
Qui correspond à un truc payé,
'creation_date': datetime.datetime(2022, 4, 18, 19, 10, 34, 148213, tzinfo=<UTC>), 'cancellation_date': None, 'waiting_date': None, 'payment_date': datetime.datetime(2022, 4, 18, 19, 14, 49, 288307, tzinfo=<UTC>), 'notification_date': datetime.datetime(2022, 4, 18, 19, 14, 50, 953646, tzinfo=<UTC>),
Si la vue est à nouveau appelée, ça redéclenche un trigger "paid" (qui tombe dans le vide, 404 et par mail trace d'erreur avec l'info).
Files
Associated revisions
History
Updated by Frédéric Péters 9 months ago
À investiguer je tombe sur plus étrange, un item pas payé, qui déclenche aussi trigger/paid/
for item in items: if not item.is_notifiable(): messages.error(request, _('At least one item is not linked to a payable form.')) return HttpResponseRedirect(next_url)
is_notifiable, ça fait l'appel ?
def is_notifiable(self, status='paid'): if not self.source_url: return True url = self.source_url + 'jump/trigger/%s' % status req = requests.get(url, remote_service='auto', timeout=5) if req.status_code == 404: return False return True
Grosse frayeur mais en fait le .get() ne déclenchera pas le trigger.
Je serais pour 1/ ajouter un commentaire explicite au code, 2/ ne pas envoyer de trace à l'admin quand on tombe sur une 404.
Ensuite, réflexion peut-être pour un autre ticket : on fait redirection vers la demande mais avec une demande par un usager pas authentifié, qui somehow avait noté l'url de paiement quelque part (?) et rejoue ça plus tard, ça va l'envoyer vers une demande à laquelle il n'a pas accès, ça va l'envoyer vers la page de connexion, où il ne pourra pas faire, sans doute pas terrible. (je ne lance pas d'idée).
Updated by Frédéric Péters 9 months ago
- File 0001-lingo-comment-is_notifiable-and-do-not-log-non-error.patch 0001-lingo-comment-is_notifiable-and-do-not-log-non-error.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Updated by Benjamin Dauvergne 9 months ago
- Status changed from Solution proposée to Solution validée
Ok pour le commentaire mais à revenir sur la situation initiale, si un item est déjà payé on ne peut pas arriver jusque là, car juste avant il y a :
if any(item.paid for item in remote_items): messages.error(request, _('Some items are already paid.')) return HttpResponseRedirect(next_url)
PS: ok, le bug est là, ça ne parcourt que remote_items, ça devrait vérifier items aussi.
Updated by Frédéric Péters 9 months ago
Oui j'ai dévié en voyant la notif d'erreur aussi pour un élément pas payé, j'en fais un ticket dédié.
lingo: comment is_notifiable() and do not log non-errors (#64460)