gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: return 402 status code instead o


From: gnunet
Subject: [taler-merchant] branch master updated: return 402 status code instead of 'unpaid' order status
Date: Sun, 26 Jul 2020 13:24:15 +0200

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

grothoff pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new 7d24651  return 402 status code instead of 'unpaid' order status
7d24651 is described below

commit 7d2465146e6dd1f50d6a8f5121edfa667f1cae84
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Jul 26 13:24:13 2020 +0200

    return 402 status code instead of 'unpaid' order status
---
 src/backend/taler-merchant-httpd_get-orders-ID.c |  10 +-
 src/lib/merchant_api_wallet_get_order.c          | 462 ++++++++++-------------
 2 files changed, 212 insertions(+), 260 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c 
b/src/backend/taler-merchant-httpd_get-orders-ID.c
index 7310483..5966f02 100644
--- a/src/backend/taler-merchant-httpd_get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_get-orders-ID.c
@@ -487,17 +487,16 @@ send_pay_request (struct GetOrderData *god,
                                            MHD_HTTP_HEADER_CONTENT_TYPE,
                                            "text/html"));
     ret = MHD_queue_response (god->sc.con,
-                              MHD_HTTP_OK,
+                              MHD_HTTP_PAYMENT_REQUIRED,
                               reply);
     MHD_destroy_response (reply);
   }
   else
   {
     ret = TALER_MHD_reply_json_pack (god->sc.con,
-                                     MHD_HTTP_OK,
-                                     "{s:s, s:s, s:s?}",
+                                     MHD_HTTP_PAYMENT_REQUIRED,
+                                     "{s:s, s:s?}",
                                      "taler_pay_uri", taler_pay_uri,
-                                     "order_status", "unpaid",
                                      "already_paid_order_id",
                                      already_paid_order_id);
   }
@@ -1259,8 +1258,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
       return TALER_MHD_reply_json_pack (
         connection,
         MHD_HTTP_OK,
-        "{s:s, s:b, s:o, s:o, s:o}",
-        "order_status", "paid",
+        "{s:b, s:o, s:o, s:o}",
         "refunded", god->refunded,
         "refund_amount",
         TALER_JSON_from_amount (&god->refund_amount),
diff --git a/src/lib/merchant_api_wallet_get_order.c 
b/src/lib/merchant_api_wallet_get_order.c
index 7b7c86e..7f6b1ed 100644
--- a/src/lib/merchant_api_wallet_get_order.c
+++ b/src/lib/merchant_api_wallet_get_order.c
@@ -110,282 +110,212 @@ handle_wallet_get_order_finished (void *cls,
 {
   struct TALER_MERCHANT_OrderWalletGetHandle *owgh = cls;
   const json_t *json = response;
-  const char *order_status;
 
   owgh->job = NULL;
-  if (MHD_HTTP_OK != response_code)
+  switch (response_code)
   {
-    struct TALER_MERCHANT_HttpResponse hr;
-
-    TALER_MERCHANT_parse_error_details_ (response,
-                                         response_code,
-                                         &hr);
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                "Checking order status failed with HTTP status code %u/%d\n",
-                (unsigned int) response_code,
-                (int) hr.ec);
-    GNUNET_break_op (0);
-    owgh->cb (owgh->cb_cls,
-              &hr,
-              GNUNET_SYSERR,
-              GNUNET_SYSERR,
-              NULL,
-              NULL,
-              NULL,
-              NULL,
-              0,
-              NULL);
-    TALER_MERCHANT_wallet_order_get_cancel (owgh);
-    return;
-  }
-
-  order_status = json_string_value (json_object_get (json, "order_status"));
-
-  if (NULL == order_status)
-  {
-    struct TALER_MERCHANT_HttpResponse hr = {
-      .reply = json,
-      .http_status = 0,
-      .ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED,
-    };
-    GNUNET_break_op (0);
-    owgh->cb (owgh->cb_cls,
-              &hr,
-              GNUNET_SYSERR,
-              GNUNET_SYSERR,
-              NULL,
-              NULL,
-              NULL,
-              NULL,
-              0,
-              NULL);
-    TALER_MERCHANT_wallet_order_get_cancel (owgh);
-    return;
-  }
-
-  if (0 == strcmp (order_status, "unpaid"))
-  {
-    /* Status is: unpaid */
-    const char *taler_pay_uri = json_string_value (json_object_get (json,
-                                                                    
"taler_pay_uri"));
-    const char *already_paid = json_string_value (json_object_get (json,
-                                                                   
"already_paid_order_id"));
-    if (NULL == taler_pay_uri)
+  case MHD_HTTP_OK:
     {
-      GNUNET_break_op (0);
-      cb_failure (owgh,
-                  TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
-                  json);
-    }
-    else
-    {
-      struct TALER_MERCHANT_HttpResponse hr = {
-        .reply = json,
-        .http_status = MHD_HTTP_OK
+      struct TALER_Amount refund_amount;
+      json_t *refunds;
+      bool refunded;
+      struct TALER_MerchantPublicKeyP merchant_pub;
+      unsigned int refund_len;
+      struct GNUNET_JSON_Specification spec[] = {
+        GNUNET_JSON_spec_bool ("refunded",
+                               &refunded),
+        GNUNET_JSON_spec_fixed_auto ("merchant_pub",
+                                     &merchant_pub),
+        TALER_JSON_spec_amount ("refund_amount",
+                                &refund_amount),
+        GNUNET_JSON_spec_json ("refunds",
+                               &refunds),
+        GNUNET_JSON_spec_end ()
       };
 
-      owgh->cb (owgh->cb_cls,
-                &hr,
-                GNUNET_NO,
-                GNUNET_NO,
-                NULL,
-                taler_pay_uri,
-                already_paid,
-                NULL,
-                0,
-                NULL);
-    }
-    TALER_MERCHANT_wallet_order_get_cancel (owgh);
-    return;
-  }
-
-  if (0 != strcmp (order_status, "paid"))
-  {
-    struct TALER_MERCHANT_HttpResponse hr = {
-      .reply = json,
-      .http_status = 0,
-      .ec = TALER_EC_MERCHANT_ORDER_GET_REPLY_MALFORMED,
-    };
-    GNUNET_break_op (0);
-    owgh->cb (owgh->cb_cls,
-              &hr,
-              GNUNET_SYSERR,
-              GNUNET_SYSERR,
-              NULL,
-              NULL,
-              NULL,
-              NULL,
-              0,
-              NULL);
-    TALER_MERCHANT_wallet_order_get_cancel (owgh);
-    return;
-  }
-
-  {
-    struct TALER_Amount refund_amount;
-    json_t *refunds;
-    bool refunded;
-    struct TALER_MerchantPublicKeyP merchant_pub;
-    unsigned int refund_len;
-    struct GNUNET_JSON_Specification spec[] = {
-      GNUNET_JSON_spec_bool ("refunded",
-                             &refunded),
-      GNUNET_JSON_spec_fixed_auto ("merchant_pub",
-                                   &merchant_pub),
-      TALER_JSON_spec_amount ("refund_amount",
-                              &refund_amount),
-      GNUNET_JSON_spec_json ("refunds",
-                             &refunds),
-      GNUNET_JSON_spec_end ()
-    };
-
-    if (GNUNET_OK !=
-        GNUNET_JSON_parse (json,
-                           spec,
-                           NULL, NULL))
-    {
-      GNUNET_break_op (0);
-      cb_failure (owgh,
-                  TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
-                  json);
-      TALER_MERCHANT_wallet_order_get_cancel (owgh);
-      return;
-    }
-
-    if (! json_is_array (refunds))
-    {
-      GNUNET_break_op (0);
-      cb_failure (owgh,
-                  TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
-                  json);
-      GNUNET_JSON_parse_free (spec);
-      TALER_MERCHANT_wallet_order_get_cancel (owgh);
-      return;
-    }
-
-    refund_len = json_array_size (refunds);
-    {
-      struct TALER_MERCHANT_RefundDetail rds[refund_len];
+      if (GNUNET_OK !=
+          GNUNET_JSON_parse (json,
+                             spec,
+                             NULL, NULL))
+      {
+        GNUNET_break_op (0);
+        cb_failure (owgh,
+                    TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
+                    json);
+        TALER_MERCHANT_wallet_order_get_cancel (owgh);
+        return;
+      }
 
-      memset (rds,
-              0,
-              sizeof (rds));
-      for (unsigned int i = 0; i<refund_len; i++)
+      if (! json_is_array (refunds))
       {
-        struct TALER_MERCHANT_RefundDetail *rd = &rds[i];
-        const json_t *jrefund = json_array_get (refunds,
-                                                i);
-        const char *refund_status_type;
-        uint32_t exchange_status;
-        int ret;
-        struct GNUNET_JSON_Specification espec[] = {
-          GNUNET_JSON_spec_uint32 ("exchange_status",
-                                   &exchange_status),
-          GNUNET_JSON_spec_end ()
-        };
+        GNUNET_break_op (0);
+        cb_failure (owgh,
+                    TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
+                    json);
+        GNUNET_JSON_parse_free (spec);
+        TALER_MERCHANT_wallet_order_get_cancel (owgh);
+        return;
+      }
 
-        if (GNUNET_OK !=
-            GNUNET_JSON_parse (jrefund,
-                               espec,
-                               NULL, NULL))
-        {
-          GNUNET_break_op (0);
-          cb_failure (owgh,
-                      TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
-                      json);
-          TALER_MERCHANT_wallet_order_get_cancel (owgh);
-          return;
-        }
+      refund_len = json_array_size (refunds);
+      {
+        struct TALER_MERCHANT_RefundDetail rds[refund_len];
 
-        if (MHD_HTTP_OK == exchange_status)
+        memset (rds,
+                0,
+                sizeof (rds));
+        for (unsigned int i = 0; i<refund_len; i++)
         {
-          struct GNUNET_JSON_Specification rspec[] = {
-            GNUNET_JSON_spec_string ("type",
-                                     &refund_status_type),
-            GNUNET_JSON_spec_fixed_auto ("exchange_sig",
-                                         &rd->exchange_sig),
-            GNUNET_JSON_spec_fixed_auto ("exchange_pub",
-                                         &rd->exchange_pub),
-            GNUNET_JSON_spec_uint64 ("rtransaction_id",
-                                     &rd->rtransaction_id),
-            GNUNET_JSON_spec_fixed_auto ("coin_pub",
-                                         &rd->coin_pub),
-            TALER_JSON_spec_amount ("refund_amount",
-                                    &rd->refund_amount),
+          struct TALER_MERCHANT_RefundDetail *rd = &rds[i];
+          const json_t *jrefund = json_array_get (refunds,
+                                                  i);
+          const char *refund_status_type;
+          uint32_t exchange_status;
+          int ret;
+          struct GNUNET_JSON_Specification espec[] = {
+            GNUNET_JSON_spec_uint32 ("exchange_status",
+                                     &exchange_status),
             GNUNET_JSON_spec_end ()
           };
 
-          ret = GNUNET_JSON_parse (jrefund,
-                                   rspec,
-                                   NULL, NULL);
-          if (GNUNET_OK == ret)
+          if (GNUNET_OK !=
+              GNUNET_JSON_parse (jrefund,
+                                 espec,
+                                 NULL, NULL))
           {
-            /* check that type field is correct */
-            if (0 != strcmp ("success", refund_status_type))
-            {
-              GNUNET_break_op (0);
-              ret = GNUNET_SYSERR;
-            }
+            GNUNET_break_op (0);
+            cb_failure (owgh,
+                        TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
+                        json);
+            TALER_MERCHANT_wallet_order_get_cancel (owgh);
+            return;
           }
-        }
-        else
-        {
-          struct GNUNET_JSON_Specification rspec[] = {
-            GNUNET_JSON_spec_string ("type",
-                                     &refund_status_type),
-            GNUNET_JSON_spec_fixed_auto ("coin_pub",
-                                         &rd->coin_pub),
-            GNUNET_JSON_spec_uint64 ("rtransaction_id",
-                                     &rd->rtransaction_id),
-            TALER_JSON_spec_amount ("refund_amount",
-                                    &rd->refund_amount),
-            GNUNET_JSON_spec_end ()
-          };
 
-          ret = GNUNET_JSON_parse (jrefund,
-                                   rspec,
-                                   NULL, NULL);
-          if (GNUNET_OK == ret)
+          if (MHD_HTTP_OK == exchange_status)
           {
-            /* parse optional arguments */
-            json_t *jec;
-
-            jec = json_object_get (jrefund,
-                                   "exchange_code");
-            if (NULL != jec)
+            struct GNUNET_JSON_Specification rspec[] = {
+              GNUNET_JSON_spec_string ("type",
+                                       &refund_status_type),
+              GNUNET_JSON_spec_fixed_auto ("exchange_sig",
+                                           &rd->exchange_sig),
+              GNUNET_JSON_spec_fixed_auto ("exchange_pub",
+                                           &rd->exchange_pub),
+              GNUNET_JSON_spec_uint64 ("rtransaction_id",
+                                       &rd->rtransaction_id),
+              GNUNET_JSON_spec_fixed_auto ("coin_pub",
+                                           &rd->coin_pub),
+              TALER_JSON_spec_amount ("refund_amount",
+                                      &rd->refund_amount),
+              GNUNET_JSON_spec_end ()
+            };
+
+            ret = GNUNET_JSON_parse (jrefund,
+                                     rspec,
+                                     NULL, NULL);
+            if (GNUNET_OK == ret)
             {
-              if (! json_is_integer (jec))
+              /* check that type field is correct */
+              if (0 != strcmp ("success", refund_status_type))
               {
                 GNUNET_break_op (0);
                 ret = GNUNET_SYSERR;
               }
-              else
-              {
-                rd->hr.ec = (enum TALER_ErrorCode) json_integer_value (jec);
-              }
             }
-            rd->hr.reply = json_object_get (jrefund,
-                                            "exchange_reply");
-            /* check that type field is correct */
-            if (0 != strcmp ("failure", refund_status_type))
+          }
+          else
+          {
+            struct GNUNET_JSON_Specification rspec[] = {
+              GNUNET_JSON_spec_string ("type",
+                                       &refund_status_type),
+              GNUNET_JSON_spec_fixed_auto ("coin_pub",
+                                           &rd->coin_pub),
+              GNUNET_JSON_spec_uint64 ("rtransaction_id",
+                                       &rd->rtransaction_id),
+              TALER_JSON_spec_amount ("refund_amount",
+                                      &rd->refund_amount),
+              GNUNET_JSON_spec_end ()
+            };
+
+            ret = GNUNET_JSON_parse (jrefund,
+                                     rspec,
+                                     NULL, NULL);
+            if (GNUNET_OK == ret)
             {
-              GNUNET_break_op (0);
-              ret = GNUNET_SYSERR;
+              /* parse optional arguments */
+              json_t *jec;
+
+              jec = json_object_get (jrefund,
+                                     "exchange_code");
+              if (NULL != jec)
+              {
+                if (! json_is_integer (jec))
+                {
+                  GNUNET_break_op (0);
+                  ret = GNUNET_SYSERR;
+                }
+                else
+                {
+                  rd->hr.ec = (enum TALER_ErrorCode) json_integer_value (jec);
+                }
+              }
+              rd->hr.reply = json_object_get (jrefund,
+                                              "exchange_reply");
+              /* check that type field is correct */
+              if (0 != strcmp ("failure", refund_status_type))
+              {
+                GNUNET_break_op (0);
+                ret = GNUNET_SYSERR;
+              }
             }
           }
+          if (GNUNET_OK != ret)
+          {
+            GNUNET_break_op (0);
+            cb_failure (owgh,
+                        TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
+                        json);
+            TALER_MERCHANT_wallet_order_get_cancel (owgh);
+            return;
+          }
+          rd->hr.http_status = exchange_status;
         }
-        if (GNUNET_OK != ret)
+
         {
-          GNUNET_break_op (0);
-          cb_failure (owgh,
-                      TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
-                      json);
-          TALER_MERCHANT_wallet_order_get_cancel (owgh);
-          return;
+          struct TALER_MERCHANT_HttpResponse hr = {
+            .reply = json,
+            .http_status = MHD_HTTP_OK
+          };
+
+          owgh->cb (owgh->cb_cls,
+                    &hr,
+                    GNUNET_YES,
+                    refunded ? GNUNET_YES : GNUNET_NO,
+                    refunded ? &refund_amount : NULL,
+                    NULL, /* paid! */
+                    NULL, /* paid! */
+                    &merchant_pub,
+                    refund_len,
+                    rds);
         }
-        rd->hr.http_status = exchange_status;
       }
-
+      GNUNET_JSON_parse_free (spec);
+      break;
+    }
+  case MHD_HTTP_PAYMENT_REQUIRED:
+    {
+      /* Status is: unpaid */
+      const char *taler_pay_uri = json_string_value (json_object_get (json,
+                                                                      
"taler_pay_uri"));
+      const char *already_paid = json_string_value (json_object_get (json,
+                                                                     
"already_paid_order_id"));
+      if (NULL == taler_pay_uri)
+      {
+        GNUNET_break_op (0);
+        cb_failure (owgh,
+                    TALER_EC_CHECK_PAYMENT_RESPONSE_MALFORMED,
+                    json);
+      }
+      else
       {
         struct TALER_MERCHANT_HttpResponse hr = {
           .reply = json,
@@ -394,17 +324,41 @@ handle_wallet_get_order_finished (void *cls,
 
         owgh->cb (owgh->cb_cls,
                   &hr,
-                  GNUNET_YES,
-                  refunded ? GNUNET_YES : GNUNET_NO,
-                  refunded ? &refund_amount : NULL,
-                  NULL, /* paid! */
-                  NULL, /* paid! */
-                  &merchant_pub,
-                  refund_len,
-                  rds);
+                  GNUNET_NO,
+                  GNUNET_NO,
+                  NULL,
+                  taler_pay_uri,
+                  already_paid,
+                  NULL,
+                  0,
+                  NULL);
       }
+      break;
+    }
+  default:
+    {
+      struct TALER_MERCHANT_HttpResponse hr;
+
+      TALER_MERCHANT_parse_error_details_ (response,
+                                           response_code,
+                                           &hr);
+      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                  "Checking order status failed with HTTP status code %u/%d\n",
+                  (unsigned int) response_code,
+                  (int) hr.ec);
+      GNUNET_break_op (0);
+      owgh->cb (owgh->cb_cls,
+                &hr,
+                GNUNET_SYSERR,
+                GNUNET_SYSERR,
+                NULL,
+                NULL,
+                NULL,
+                NULL,
+                0,
+                NULL);
+      break;
     }
-    GNUNET_JSON_parse_free (spec);
   }
   TALER_MERCHANT_wallet_order_get_cancel (owgh);
 }

-- 
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]