gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: -fix batch deposit error handlin


From: gnunet
Subject: [taler-exchange] branch master updated: -fix batch deposit error handling rvalues
Date: Sat, 02 Jul 2022 21:31:39 +0200

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

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new 74cf7654 -fix batch deposit error handling rvalues
74cf7654 is described below

commit 74cf7654e5a4002787b8dd4d9ac43379142afd3f
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Jul 2 21:31:36 2022 +0200

    -fix batch deposit error handling rvalues
---
 src/exchange/taler-exchange-httpd_batch-deposit.c | 124 ++++++++++++----------
 1 file changed, 70 insertions(+), 54 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_batch-deposit.c 
b/src/exchange/taler-exchange-httpd_batch-deposit.c
index 31405027..f2376564 100644
--- a/src/exchange/taler-exchange-httpd_batch-deposit.c
+++ b/src/exchange/taler-exchange-httpd_batch-deposit.c
@@ -224,7 +224,7 @@ again:
 
 
 /**
- * Execute database transaction for /deposit.  Runs the transaction
+ * Execute database transaction for /batch-deposit.  Runs the transaction
  * logic; IF it returns a non-error code, the transaction logic MUST
  * NOT queue a MHD response.  IF it returns an hard error, the
  * transaction logic MUST queue a MHD response and set @a mhd_ret.  IF
@@ -269,11 +269,12 @@ batch_deposit_transaction (void *cls,
     {
       if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
         return qs;
-      TALER_LOG_WARNING ("Failed to store /deposit information in database\n");
+      TALER_LOG_WARNING (
+        "Failed to store /batch-deposit information in database\n");
       *mhd_ret = TALER_MHD_reply_with_error (connection,
                                              MHD_HTTP_INTERNAL_SERVER_ERROR,
                                              TALER_EC_GENERIC_DB_STORE_FAILED,
-                                             "deposit");
+                                             "batch-deposit");
       return qs;
     }
     if (in_conflict)
@@ -341,20 +342,11 @@ parse_coin (struct MHD_Connection *connection,
   };
   enum GNUNET_GenericReturnValue res;
 
-  res = TALER_MHD_parse_json_data (connection,
-                                   jcoin,
-                                   spec);
-  if (GNUNET_SYSERR == res)
-  {
-    GNUNET_break (0);
-    return MHD_NO;   /* hard failure */
-  }
-  if (GNUNET_NO == res)
-  {
-    GNUNET_break_op (0);
-    return MHD_YES;   /* failure */
-  }
-
+  if (GNUNET_OK !=
+      (res = TALER_MHD_parse_json_data (connection,
+                                        jcoin,
+                                        spec)))
+    return res;
   /* check denomination exists and is valid */
   {
     struct TEH_DenominationKey *dk;
@@ -373,49 +365,64 @@ parse_coin (struct MHD_Connection *connection,
     {
       GNUNET_break_op (0);
       GNUNET_JSON_parse_free (spec);
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_BAD_REQUEST,
-                                         
TALER_EC_EXCHANGE_GENERIC_AMOUNT_EXCEEDS_DENOMINATION_VALUE,
-                                         NULL);
+      return (MHD_YES ==
+              TALER_MHD_reply_with_error (connection,
+                                          MHD_HTTP_BAD_REQUEST,
+                                          
TALER_EC_EXCHANGE_GENERIC_AMOUNT_EXCEEDS_DENOMINATION_VALUE,
+                                          NULL))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
     }
     if (GNUNET_TIME_absolute_is_past (dk->meta.expire_deposit.abs_time))
     {
       /* This denomination is past the expiration time for deposits */
       GNUNET_JSON_parse_free (spec);
-      return TEH_RESPONSE_reply_expired_denom_pub_hash (
-        connection,
-        &deposit->coin.denom_pub_hash,
-        TALER_EC_EXCHANGE_GENERIC_DENOMINATION_EXPIRED,
-        "DEPOSIT");
+      return (MHD_YES ==
+              TEH_RESPONSE_reply_expired_denom_pub_hash (
+                connection,
+                &deposit->coin.denom_pub_hash,
+                TALER_EC_EXCHANGE_GENERIC_DENOMINATION_EXPIRED,
+                "DEPOSIT"))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
     }
     if (GNUNET_TIME_absolute_is_future (dk->meta.start.abs_time))
     {
       /* This denomination is not yet valid */
       GNUNET_JSON_parse_free (spec);
-      return TEH_RESPONSE_reply_expired_denom_pub_hash (
-        connection,
-        &deposit->coin.denom_pub_hash,
-        TALER_EC_EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE,
-        "DEPOSIT");
+      return (MHD_YES ==
+              TEH_RESPONSE_reply_expired_denom_pub_hash (
+                connection,
+                &deposit->coin.denom_pub_hash,
+                TALER_EC_EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE,
+                "DEPOSIT"))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
     }
     if (dk->recoup_possible)
     {
       /* This denomination has been revoked */
       GNUNET_JSON_parse_free (spec);
-      return TEH_RESPONSE_reply_expired_denom_pub_hash (
-        connection,
-        &deposit->coin.denom_pub_hash,
-        TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED,
-        "DEPOSIT");
+      return (MHD_YES ==
+              TEH_RESPONSE_reply_expired_denom_pub_hash (
+                connection,
+                &deposit->coin.denom_pub_hash,
+                TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED,
+                "DEPOSIT"))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
     }
     if (dk->denom_pub.cipher != deposit->coin.denom_sig.cipher)
     {
       /* denomination cipher and denomination signature cipher not the same */
       GNUNET_JSON_parse_free (spec);
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_BAD_REQUEST,
-                                         
TALER_EC_EXCHANGE_GENERIC_CIPHER_MISMATCH,
-                                         NULL);
+      return (MHD_YES ==
+              TALER_MHD_reply_with_error (connection,
+                                          MHD_HTTP_BAD_REQUEST,
+                                          
TALER_EC_EXCHANGE_GENERIC_CIPHER_MISMATCH,
+                                          NULL))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
     }
 
     deposit->deposit_fee = dk->meta.fees.deposit;
@@ -435,12 +442,15 @@ parse_coin (struct MHD_Connection *connection,
         TALER_test_coin_valid (&deposit->coin,
                                &dk->denom_pub))
     {
-      TALER_LOG_WARNING ("Invalid coin passed for /deposit\n");
+      TALER_LOG_WARNING ("Invalid coin passed for /batch-deposit\n");
       GNUNET_JSON_parse_free (spec);
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_FORBIDDEN,
-                                         
TALER_EC_EXCHANGE_DENOMINATION_SIGNATURE_INVALID,
-                                         NULL);
+      return (MHD_YES ==
+              TALER_MHD_reply_with_error (connection,
+                                          MHD_HTTP_FORBIDDEN,
+                                          
TALER_EC_EXCHANGE_DENOMINATION_SIGNATURE_INVALID,
+                                          NULL))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
     }
   }
   if (0 < TALER_amount_cmp (&deposit->deposit_fee,
@@ -448,10 +458,13 @@ parse_coin (struct MHD_Connection *connection,
   {
     GNUNET_break_op (0);
     GNUNET_JSON_parse_free (spec);
-    return TALER_MHD_reply_with_error (connection,
-                                       MHD_HTTP_BAD_REQUEST,
-                                       
TALER_EC_EXCHANGE_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE,
-                                       NULL);
+    return (MHD_YES ==
+            TALER_MHD_reply_with_error (connection,
+                                        MHD_HTTP_BAD_REQUEST,
+                                        
TALER_EC_EXCHANGE_DEPOSIT_NEGATIVE_VALUE_AFTER_FEE,
+                                        NULL))
+        ? GNUNET_NO
+        : GNUNET_SYSERR;
   }
 
   TEH_METRICS_num_verifications[TEH_MT_SIGNATURE_EDDSA]++;
@@ -469,12 +482,15 @@ parse_coin (struct MHD_Connection *connection,
                                    &deposit->coin.coin_pub,
                                    &deposit->csig))
   {
-    TALER_LOG_WARNING ("Invalid signature on /deposit request\n");
+    TALER_LOG_WARNING ("Invalid signature on /batch-deposit request\n");
     GNUNET_JSON_parse_free (spec);
-    return TALER_MHD_reply_with_error (connection,
-                                       MHD_HTTP_FORBIDDEN,
-                                       
TALER_EC_EXCHANGE_DEPOSIT_COIN_SIGNATURE_INVALID,
-                                       NULL);
+    return (MHD_YES ==
+            TALER_MHD_reply_with_error (connection,
+                                        MHD_HTTP_FORBIDDEN,
+                                        
TALER_EC_EXCHANGE_DEPOSIT_COIN_SIGNATURE_INVALID,
+                                        NULL))
+      ? GNUNET_NO
+      : GNUNET_SYSERR;
   }
   deposit->merchant_pub = dc->merchant_pub;
   deposit->h_contract_terms = dc->h_contract_terms;

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