summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-08-07 15:37:21 +0200
committerChristian Grothoff <christian@grothoff.org>2021-08-07 15:37:21 +0200
commit8e703ec55501282f5fade998d8ce173f81f5fa49 (patch)
tree119bfbb61bd7189e2bfb7f0863349df00854e4d7
parentd66d8a9ea07b5c0c46bd2f278e17b580677eaea5 (diff)
downloadmerchant-8e703ec55501282f5fade998d8ce173f81f5fa49.tar.gz
merchant-8e703ec55501282f5fade998d8ce173f81f5fa49.tar.bz2
merchant-8e703ec55501282f5fade998d8ce173f81f5fa49.zip
fix #6983: do not keep contract terms across transactions
-rw-r--r--src/backend/taler-merchant-httpd_get-orders-ID.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c b/src/backend/taler-merchant-httpd_get-orders-ID.c
index c679211f..b96f6ba0 100644
--- a/src/backend/taler-merchant-httpd_get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_get-orders-ID.c
@@ -190,6 +190,12 @@ suspend_god (struct GetOrderData *god)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Suspending GET /orders/%s\n",
god->order_id);
+ if (NULL != god->contract_terms)
+ {
+ json_decref (god->contract_terms);
+ god->fulfillment_url = NULL;
+ god->contract_terms = NULL;
+ }
GNUNET_assert (! god->suspended);
god->suspended = true;
GNUNET_CONTAINER_DLL_insert (god_head,
@@ -491,10 +497,12 @@ send_pay_request (struct GetOrderData *god,
struct GNUNET_TIME_Relative remaining;
remaining = GNUNET_TIME_absolute_get_remaining (god->sc.long_poll_timeout);
- if ( (0 != remaining.rel_value_us) &&
+ if ( (! GNUNET_TIME_relative_is_zero (remaining)) &&
(NULL == already_paid_order_id) )
{
/* long polling: do not queue a response, suspend connection instead */
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Suspending request: long polling for payment\n");
suspend_god (god);
return MHD_YES;
}
@@ -679,7 +687,10 @@ god_cleanup (void *cls)
struct GetOrderData *god = cls;
if (NULL != god->contract_terms)
+ {
json_decref (god->contract_terms);
+ god->contract_terms = NULL;
+ }
GNUNET_free (god);
}
@@ -969,6 +980,8 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
{
const char *public_reorder_url;
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Neither claim token nor contract matched\n");
public_reorder_url = json_string_value (json_object_get (
god->contract_terms,
"public_reorder_url"));
@@ -1029,11 +1042,14 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
GNUNET_JSON_pack_string ("public_reorder_url",
public_reorder_url));
}
+
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Claim token or contract matched\n");
if (! god->claimed)
{
/* Order is unclaimed, no need to check for payments or even
refunds, simply always generate payment request */
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Order unclaimed, sending pay request for order %s\n",
order_id);
return send_pay_request (god,
@@ -1080,7 +1096,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
{
MHD_RESULT ret;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Sending pay request for order %s (already paid: %s)\n",
order_id,
already_paid_order_id);
@@ -1115,7 +1131,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
GNUNET_break (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs);
if (! paid)
{
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Order claimed but unpaid, sending pay request for order %s\n",
order_id);
return send_pay_request (god,
@@ -1154,7 +1170,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
struct GNUNET_TIME_Relative remaining;
remaining = GNUNET_TIME_absolute_get_remaining (god->sc.long_poll_timeout);
- if (0 != remaining.rel_value_us)
+ if (! GNUNET_TIME_relative_is_zero (remaining))
{
/* yes, indeed suspend */
if (god->sc.awaiting_refund)
@@ -1162,7 +1178,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
"Awaiting refund exceeding %s\n",
TALER_amount2s (&god->sc.refund_expected));
if (god->sc.awaiting_refund_obtained)
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Awaiting pending refunds\n");
suspend_god (god);
return MHD_YES;