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).
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a environ 2 ans
À 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).
Mis à jour par Frédéric Péters il y a environ 2 ans
- Fichier 0001-lingo-comment-is_notifiable-and-do-not-log-non-error.patch 0001-lingo-comment-is_notifiable-and-do-not-log-non-error.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Statut changé de Solution proposée à 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.
Mis à jour par Benjamin Dauvergne il y a environ 2 ans
- Statut changé de Solution validée à Nouveau
Mis à jour par Frédéric Péters il y a environ 2 ans
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)