gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] 04/13: -make econtract optional as per design


From: gnunet
Subject: [taler-exchange] 04/13: -make econtract optional as per design
Date: Sun, 26 Jun 2022 17:15:05 +0200

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

oec pushed a commit to branch master
in repository exchange.

commit ce515a1f75266c778bf7055036aa40b5ade32a63
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Thu Jun 23 23:09:45 2022 +0200

    -make econtract optional as per design
---
 src/exchange/taler-exchange-httpd_purses_create.c | 108 ++++++++++++----------
 1 file changed, 58 insertions(+), 50 deletions(-)

diff --git a/src/exchange/taler-exchange-httpd_purses_create.c 
b/src/exchange/taler-exchange-httpd_purses_create.c
index cc5478d1..207be5d0 100644
--- a/src/exchange/taler-exchange-httpd_purses_create.c
+++ b/src/exchange/taler-exchange-httpd_purses_create.c
@@ -135,6 +135,12 @@ struct PurseCreateContext
    * Minimum age for deposits into this purse.
    */
   uint32_t min_age;
+
+  /**
+   * Do we have an @e econtract?
+   */
+  bool no_econtract;
+
 };
 
 
@@ -370,61 +376,64 @@ create_transaction (void *cls,
     }
   }
   /* 3) if present, persist contract */
-  in_conflict = true;
-  qs = TEH_plugin->insert_contract (TEH_plugin->cls,
-                                    pcc->purse_pub,
-                                    &pcc->econtract,
-                                    &in_conflict);
-  if (qs < 0)
-  {
-    if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
-      return qs;
-    TALER_LOG_WARNING ("Failed to store purse information in database\n");
-    *mhd_ret = TALER_MHD_reply_with_error (connection,
-                                           MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                           TALER_EC_GENERIC_DB_STORE_FAILED,
-                                           "purse create contract");
-    return GNUNET_DB_STATUS_HARD_ERROR;
-  }
-  if (in_conflict)
+  if (! pcc->no_econtract)
   {
-    struct TALER_EncryptedContract econtract;
-    struct GNUNET_HashCode h_econtract;
-
-    qs = TEH_plugin->select_contract_by_purse (
-      TEH_plugin->cls,
-      pcc->purse_pub,
-      &econtract);
-    if (qs <= 0)
+    in_conflict = true;
+    qs = TEH_plugin->insert_contract (TEH_plugin->cls,
+                                      pcc->purse_pub,
+                                      &pcc->econtract,
+                                      &in_conflict);
+    if (qs < 0)
     {
       if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
         return qs;
-      GNUNET_break (0 != qs);
-      TALER_LOG_WARNING (
-        "Failed to store fetch contract information from database\n");
+      TALER_LOG_WARNING ("Failed to store purse information in database\n");
       *mhd_ret = TALER_MHD_reply_with_error (connection,
                                              MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                             TALER_EC_GENERIC_DB_FETCH_FAILED,
-                                             "select contract");
+                                             TALER_EC_GENERIC_DB_STORE_FAILED,
+                                             "purse create contract");
+      return GNUNET_DB_STATUS_HARD_ERROR;
+    }
+    if (in_conflict)
+    {
+      struct TALER_EncryptedContract econtract;
+      struct GNUNET_HashCode h_econtract;
+
+      qs = TEH_plugin->select_contract_by_purse (
+        TEH_plugin->cls,
+        pcc->purse_pub,
+        &econtract);
+      if (qs <= 0)
+      {
+        if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
+          return qs;
+        GNUNET_break (0 != qs);
+        TALER_LOG_WARNING (
+          "Failed to store fetch contract information from database\n");
+        *mhd_ret = TALER_MHD_reply_with_error (connection,
+                                               MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                               
TALER_EC_GENERIC_DB_FETCH_FAILED,
+                                               "select contract");
+        return GNUNET_DB_STATUS_HARD_ERROR;
+      }
+      GNUNET_CRYPTO_hash (econtract.econtract,
+                          econtract.econtract_size,
+                          &h_econtract);
+      *mhd_ret
+        = TALER_MHD_REPLY_JSON_PACK (
+            connection,
+            MHD_HTTP_CONFLICT,
+            TALER_JSON_pack_ec (
+              TALER_EC_EXCHANGE_PURSE_ECONTRACT_CONFLICTING_META_DATA),
+            GNUNET_JSON_pack_data_auto ("h_econtract",
+                                        &h_econtract),
+            GNUNET_JSON_pack_data_auto ("econtract_sig",
+                                        &econtract.econtract_sig),
+            GNUNET_JSON_pack_data_auto ("contract_pub",
+                                        &econtract.contract_pub));
+      GNUNET_free (econtract.econtract);
       return GNUNET_DB_STATUS_HARD_ERROR;
     }
-    GNUNET_CRYPTO_hash (econtract.econtract,
-                        econtract.econtract_size,
-                        &h_econtract);
-    *mhd_ret
-      = TALER_MHD_REPLY_JSON_PACK (
-          connection,
-          MHD_HTTP_CONFLICT,
-          TALER_JSON_pack_ec (
-            TALER_EC_EXCHANGE_PURSE_ECONTRACT_CONFLICTING_META_DATA),
-          GNUNET_JSON_pack_data_auto ("h_econtract",
-                                      &h_econtract),
-          GNUNET_JSON_pack_data_auto ("econtract_sig",
-                                      &econtract.econtract_sig),
-          GNUNET_JSON_pack_data_auto ("contract_pub",
-                                      &econtract.contract_pub));
-    GNUNET_free (econtract.econtract);
-    return GNUNET_DB_STATUS_HARD_ERROR;
   }
   return qs;
 }
@@ -664,7 +673,6 @@ TEH_handler_purses_create (
   json_t *deposits;
   json_t *deposit;
   unsigned int idx;
-  bool no_econtract = true;
   struct GNUNET_JSON_Specification spec[] = {
     TALER_JSON_spec_amount ("amount",
                             TEH_currency,
@@ -674,7 +682,7 @@ TEH_handler_purses_create (
     GNUNET_JSON_spec_mark_optional (
       TALER_JSON_spec_econtract ("econtract",
                                  &pcc.econtract),
-      &no_econtract),
+      &pcc.no_econtract),
     GNUNET_JSON_spec_fixed_auto ("merge_pub",
                                  &pcc.merge_pub),
     GNUNET_JSON_spec_fixed_auto ("purse_sig",
@@ -815,7 +823,7 @@ TEH_handler_purses_create (
                                        
TALER_EC_EXCHANGE_PURSE_CREATE_SIGNATURE_INVALID,
                                        NULL);
   }
-  if ( (! no_econtract) &&
+  if ( (! pcc.no_econtract) &&
        (GNUNET_OK !=
         TALER_wallet_econtract_upload_verify (pcc.econtract.econtract,
                                               pcc.econtract.econtract_size,

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