gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-merchant] branch master updated: look up claim token and include


From: gnunet
Subject: [taler-merchant] branch master updated: look up claim token and include it in claimed but unpaid order URLs to avoid redirect loop
Date: Tue, 29 Sep 2020 14:00:10 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new 9d25f3c  look up claim token and include it in claimed but unpaid 
order URLs to avoid redirect loop
9d25f3c is described below

commit 9d25f3c0f66e30f6dd15a8dd53a80328054aac8d
Author: Florian Dold <florian.dold@gmail.com>
AuthorDate: Tue Sep 29 17:30:02 2020 +0530

    look up claim token and include it in claimed but unpaid order URLs to 
avoid redirect loop
---
 .../taler-merchant-httpd_private-get-orders-ID.c   | 62 ++++++++++++++++++----
 1 file changed, 51 insertions(+), 11 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c 
b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
index 1f47a47..829b3a5 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -834,15 +834,6 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler 
*rh,
                                       &gorc->order_serial);
   if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
   {
-    struct GNUNET_HashCode unused;
-
-    /* We don't have contract terms, but the order may still exist. */
-    qs = TMH_db->lookup_order (TMH_db->cls,
-                               hc->instance->settings.id,
-                               hc->infix,
-                               &claim_token,
-                               &unused,
-                               &gorc->contract_terms);
     order_only = true;
   }
   if (0 > qs)
@@ -864,6 +855,48 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler 
*rh,
                                        TALER_EC_GET_ORDERS_ORDER_NOT_FOUND,
                                        hc->infix);
   }
+
+  {
+    struct GNUNET_HashCode unused;
+    json_t *ct = NULL;
+
+    /* We need the order for two cases:  Either when the contract doesn't 
exist yet,
+     * or when the order is claimed but unpaid, and we need the claim token. */
+    qs = TMH_db->lookup_order (TMH_db->cls,
+                               hc->instance->settings.id,
+                               hc->infix,
+                               &claim_token,
+                               &unused,
+                               &ct);
+
+    if (0 > qs)
+    {
+      /* single, read-only SQL statements should never cause
+         serialization problems */
+      GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
+      /* Always report on hard error as well to enable diagnostics */
+      GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+      return TALER_MHD_reply_with_error (connection,
+                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                         
TALER_EC_GET_ORDERS_DB_FETCH_CONTRACT_TERMS_ERROR,
+                                         NULL);
+    }
+    if (order_only && (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) )
+    {
+      return TALER_MHD_reply_with_error (connection,
+                                         MHD_HTTP_NOT_FOUND,
+                                         TALER_EC_GET_ORDERS_ORDER_NOT_FOUND,
+                                         hc->infix);
+    }
+    if (order_only)
+    {
+      gorc->contract_terms = ct;
+    }
+    else if (NULL != ct)
+    {
+      json_decref (ct);
+    }
+  }
   /* extract the fulfillment URL and total amount from the contract terms! */
   {
     struct GNUNET_JSON_Specification spec[] = {
@@ -1069,17 +1102,24 @@ TMH_private_get_orders_ID (const struct 
TMH_RequestHandler *rh,
     char *taler_pay_uri;
     char *order_status_url;
     MHD_RESULT ret;
+    struct TALER_ClaimTokenP *ct = NULL;
+
+    /* Already claimed, so we include the claim token so that
+     * the order status page will show the QR code and won't run
+     * into a redirect loop. */
+    if (! order_only)
+      ct = &claim_token;
 
     taler_pay_uri = TMH_make_taler_pay_uri (connection,
                                             hc->infix,
                                             gorc->session_id,
                                             hc->instance->settings.id,
-                                            &claim_token);
+                                            ct);
     order_status_url = TMH_make_order_status_url (connection,
                                                   hc->infix,
                                                   gorc->session_id,
                                                   hc->instance->settings.id,
-                                                  &claim_token,
+                                                  ct,
                                                   NULL);
     ret = TALER_MHD_reply_json_pack (connection,
                                      MHD_HTTP_OK,

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]