gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] 02/03: api update to support refactored merchant order


From: gnunet
Subject: [taler-exchange] 02/03: api update to support refactored merchant order creation
Date: Sun, 24 Dec 2023 17:09:35 +0100

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

grothoff pushed a commit to branch master
in repository exchange.

commit e690e53ebfc3d810e5ffdf90c86d0d4159a7c8da
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Mon Dec 25 00:08:48 2023 +0800

    api update to support refactored merchant order creation
---
 src/include/taler_json_lib.h | 14 +++++++------
 src/json/json.c              | 49 ++++++++++++++++++++++++++++----------------
 src/json/test_json.c         |  3 ++-
 3 files changed, 41 insertions(+), 25 deletions(-)

diff --git a/src/include/taler_json_lib.h b/src/include/taler_json_lib.h
index 38668fdc..859ec887 100644
--- a/src/include/taler_json_lib.h
+++ b/src/include/taler_json_lib.h
@@ -581,16 +581,18 @@ TALER_JSON_contract_hash (const json_t *json,
 
 
 /**
- * Take a given contract with "forgettable" fields marked
- * but with 'True' instead of a real salt. Replaces all
- * 'True' values with proper random salts.  Fails if any
- * forgettable markers are neither 'True' nor valid salts.
+ * Take a given @a contract with "forgettable" fields marked in the @a spec
+ * with 'True' instead of a real salt. Replaces all 'True' values with proper
+ * random salts in the actual @a contract.  Fails if any forgettable markers
+ * are neither 'True' nor valid salts.
  *
- * @param[in,out] json JSON to transform
+ * @param spec specification with forgettable fields
+ * @param[in,out] contract JSON contract to transform
  * @return #GNUNET_OK on success
  */
 enum GNUNET_GenericReturnValue
-TALER_JSON_contract_seed_forgettable (json_t *json);
+TALER_JSON_contract_seed_forgettable (const json_t *spec,
+                                      json_t *contract);
 
 
 /**
diff --git a/src/json/json.c b/src/json/json.c
index fb00fb53..639bd530 100644
--- a/src/json/json.c
+++ b/src/json/json.c
@@ -533,7 +533,7 @@ TALER_JSON_contract_part_forget (json_t *json,
 
 
 /**
- * Look over all of the values of a '$forgettable' object.  Replace 'True'
+ * Loop over all of the values of a '$forgettable' object.  Replace 'True'
  * values with proper random salts.  Fails if any forgettable values are
  * neither 'True' nor valid salts (strings).
  *
@@ -578,51 +578,64 @@ seed_forgettable (json_t *f)
 }
 
 
-/**
- * Take a given contract with "forgettable" fields marked
- * but with 'True' instead of a real salt. Replaces all
- * 'True' values with proper random salts.  Fails if any
- * forgettable markers are neither 'True' nor valid salts.
- *
- * @param[in,out] json JSON to transform
- * @return #GNUNET_OK on success
- */
 enum GNUNET_GenericReturnValue
-TALER_JSON_contract_seed_forgettable (json_t *json)
+TALER_JSON_contract_seed_forgettable (const json_t *spec,
+                                      json_t *contract)
 {
-  if (json_is_object (json))
+  if (json_is_object (spec))
   {
     const char *key;
     json_t *val;
 
-    json_object_foreach (json,
+    json_object_foreach ((json_t *) spec,
                          key,
                          val)
     {
+      json_t *cval = json_object_get (contract,
+                                      key);
+
       if (0 == strcmp ("$forgettable",
                        key))
       {
+        json_t *xval = json_deep_copy (val);
+
         if (GNUNET_OK !=
-            seed_forgettable (val))
+            seed_forgettable (xval))
+        {
+          json_decref (xval);
           return GNUNET_SYSERR;
+        }
+        GNUNET_assert (0 ==
+                       json_object_set_new (contract,
+                                            "$forgettable",
+                                            xval));
         continue;
       }
+      if (NULL == cval)
+        continue;
       if (GNUNET_OK !=
-          TALER_JSON_contract_seed_forgettable (val))
+          TALER_JSON_contract_seed_forgettable (val,
+                                                cval))
         return GNUNET_SYSERR;
     }
   }
-  if (json_is_array (json))
+  if (json_is_array (spec))
   {
     size_t index;
     json_t *val;
 
-    json_array_foreach (json,
+    json_array_foreach ((json_t *) spec,
                         index,
                         val)
     {
+      json_t *ival = json_array_get (contract,
+                                     index);
+
+      if (NULL == ival)
+        continue;
       if (GNUNET_OK !=
-          TALER_JSON_contract_seed_forgettable (val))
+          TALER_JSON_contract_seed_forgettable (val,
+                                                ival))
         return GNUNET_SYSERR;
     }
   }
diff --git a/src/json/test_json.c b/src/json/test_json.c
index d37f66ea..fba72f84 100644
--- a/src/json/test_json.c
+++ b/src/json/test_json.c
@@ -103,7 +103,8 @@ test_contract (void)
                   "k2", "n1", "n2",
                   /***/ "$forgettable", "n1", true);
   GNUNET_assert (GNUNET_OK ==
-                 TALER_JSON_contract_seed_forgettable (c1));
+                 TALER_JSON_contract_seed_forgettable (c1,
+                                                       c1));
   GNUNET_assert (GNUNET_OK ==
                  TALER_JSON_contract_hash (c1,
                                            &h1));

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