gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] 03/31: serialize v0 contract


From: gnunet
Subject: [taler-merchant] 03/31: serialize v0 contract
Date: Thu, 18 Apr 2024 08:38:56 +0200

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

christian-blaettler pushed a commit to branch master
in repository merchant.

commit 48ebda9a68b01780cfb7de802f4eee3dbe708e80
Author: Christian Blättler <blatc2@bfh.ch>
AuthorDate: Thu Feb 29 15:21:08 2024 +0100

    serialize v0 contract
---
 src/backend/taler-merchant-httpd_contract.c        | 164 ++++++++++
 src/backend/taler-merchant-httpd_contract.h        | 250 ++++++++++++++-
 .../taler-merchant-httpd_private-post-orders.c     | 340 +--------------------
 3 files changed, 414 insertions(+), 340 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_contract.c 
b/src/backend/taler-merchant-httpd_contract.c
index e69de29b..01186bef 100644
--- a/src/backend/taler-merchant-httpd_contract.c
+++ b/src/backend/taler-merchant-httpd_contract.c
@@ -0,0 +1,164 @@
+/*
+  This file is part of TALER
+  (C) 2024 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or modify it under the
+  terms of the GNU Lesser General Public License as published by the Free 
Software
+  Foundation; either version 3, or (at your option) any later version.
+
+  TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+  A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License along with
+  TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file taler-merchant-httpd_contract.c
+ * @brief shared logic for contract terms handling
+ * @author Christian Blättler
+ */
+#include "platform.h"
+#include <jansson.h>
+#include "taler-merchant-httpd_contract.h"
+
+enum GNUNET_GenericReturnValue
+TMH_serialize_contract_v0 (const struct TALER_MerchantContract *contract,
+                           const struct TMH_MerchantInstance *instance,
+                           const struct TMH_WireMethod *wm,
+                           json_t *exchanges,
+                           json_t *products,
+                           struct TALER_Amount *max_fee,
+                           json_t **out)
+{
+  json_t *merchant;
+
+  {
+    merchant = GNUNET_JSON_PACK (
+      GNUNET_JSON_pack_string ("name",
+                               instance->settings.name),
+      GNUNET_JSON_pack_allow_null (
+        GNUNET_JSON_pack_string ("website",
+                                 instance->settings.website)),
+      GNUNET_JSON_pack_allow_null (
+        GNUNET_JSON_pack_string ("email",
+                                 instance->settings.email)),
+      GNUNET_JSON_pack_allow_null (
+        GNUNET_JSON_pack_string ("logo",
+                                 instance->settings.logo)));
+    GNUNET_assert (NULL != merchant);
+    {
+      json_t *loca;
+
+      /* Handle merchant address */
+      loca = instance->settings.address;
+      if (NULL != loca)
+      {
+        loca = json_deep_copy (loca);
+        GNUNET_assert (NULL != loca);
+        GNUNET_assert (0 ==
+                       json_object_set_new (merchant,
+                                            "address",
+                                            loca));
+      }
+    }
+    {
+      json_t *juri;
+
+      /* Handle merchant jurisdiction */
+      juri = instance->settings.jurisdiction;
+      if (NULL != juri)
+      {
+        juri = json_deep_copy (juri);
+        GNUNET_assert (NULL != juri);
+        GNUNET_assert (0 ==
+                       json_object_set_new (merchant,
+                                            "jurisdiction",
+                                            juri));
+      }
+    }
+  }
+
+  *out = GNUNET_JSON_PACK (
+    GNUNET_JSON_pack_string ("summary",
+                             contract->v0.summary),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_object_incref ("summary_i18n",
+                                      contract->v0.summary_i18n)),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_string ("public_reorder_url",
+                               contract->public_reorder_url)),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_string ("fulfillment_message",
+                               contract->v0.fulfillment_message)),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_object_incref ("fulfillment_message_i18n",
+                                      contract->v0.fulfillment_message_i18n)),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_string ("fulfillment_url",
+                               contract->v0.fulfillment_url)),
+    GNUNET_JSON_pack_array_incref ("products",
+                                   products),
+    GNUNET_JSON_pack_data_auto ("h_wire",
+                                &wm->h_wire),
+    GNUNET_JSON_pack_string ("wire_method",
+                             wm->wire_method),
+    GNUNET_JSON_pack_string ("order_id",
+                             contract->order_id),
+    GNUNET_JSON_pack_timestamp ("timestamp",
+                                contract->timestamp),
+    GNUNET_JSON_pack_timestamp ("pay_deadline",
+                                contract->pay_deadline),
+    GNUNET_JSON_pack_timestamp ("wire_transfer_deadline",
+                                contract->wire_deadline),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_timestamp ("delivery_date",
+                                  contract->delivery_date)),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_object_incref ("delivery_location",
+                                      contract->delivery_location)),
+    GNUNET_JSON_pack_string ("merchant_base_url",
+                             contract->merchant_base_url),
+    GNUNET_JSON_pack_object_incref ("merchant",
+                                    merchant),
+    GNUNET_JSON_pack_data_auto ("merchant_pub",
+                                &instance->merchant_pub),
+    GNUNET_JSON_pack_array_incref ("exchanges",
+                                   exchanges),
+    TALER_JSON_pack_amount ("max_fee",
+                            max_fee),
+    TALER_JSON_pack_amount ("amount",
+                            &contract->v0.brutto),
+    GNUNET_JSON_pack_allow_null (
+      GNUNET_JSON_pack_object_incref ("extra",
+                                      (json_t *) contract->extra))
+    );
+
+  /* Pack does not work here, because it doesn't set zero-values for 
timestamps */
+  GNUNET_assert (0 ==
+                 json_object_set_new (*out,
+                                      "refund_deadline",
+                                      GNUNET_JSON_from_timestamp (
+                                        contract->refund_deadline)));
+  GNUNET_log (
+    GNUNET_ERROR_TYPE_INFO,
+    "Refund deadline for contact is %llu\n",
+    (unsigned long long) contract->refund_deadline.abs_time.abs_value_us);
+  GNUNET_log (
+    GNUNET_ERROR_TYPE_INFO,
+    "Wallet timestamp for contact is %llu\n",
+    (unsigned long long) contract->timestamp.abs_time.abs_value_us);
+
+  /* Pack does not work here, because it sets zero-values for relative times */
+  /* auto_refund should only be set if it is not 0 */
+  if (! GNUNET_TIME_relative_is_zero (contract->auto_refund))
+  {
+    GNUNET_assert (0 ==
+                   json_object_set_new (*out,
+                                        "auto_refund",
+                                        GNUNET_JSON_from_time_rel (
+                                          contract->auto_refund)));
+  }
+
+  return GNUNET_OK;
+};
diff --git a/src/backend/taler-merchant-httpd_contract.h 
b/src/backend/taler-merchant-httpd_contract.h
index ed5fe4ad..5df47bc9 100644
--- a/src/backend/taler-merchant-httpd_contract.h
+++ b/src/backend/taler-merchant-httpd_contract.h
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2023 Taler Systems SA
+  (C) 2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Lesser General Public License as published by the Free 
Software
@@ -19,6 +19,7 @@
  * @author Christian Blättler
  */
 #include "taler-merchant-httpd.h"
+#include <jansson.h>
 
 
 /**
@@ -38,10 +39,59 @@ enum TALER_MerchantContractVersion
   TALER_MCV_V1 = 1
 };
 
+/**
+* Contract fields specific to v0 contract format.
+*/
+struct TALER_MerchantContractV0
+{
+  /**
+  * Summary of the order.
+  */
+  const char *summary;
+
+  /**
+  * Internationalized summary.
+  */
+  json_t *summary_i18n;
+
+  /**
+  * URL that will show that the order was successful
+  * after it has been paid for.
+  */
+  const char *fulfillment_url;
+
+  /**
+  * Message shown to the customer after paying for the order.
+  * Either fulfillment_url or fulfillment_message must be specified.
+  */
+  const char *fulfillment_message;
+
+  /**
+  * Map from IETF BCP 47 language tags to localized fulfillment messages.
+  */
+  json_t *fulfillment_message_i18n;
+
+  /**
+  * Array of products that are part of the purchase.
+  */
+  const json_t *products;
+
+  /**
+  * Gross amount value of the contract. Used to
+  * compute @e max_stefan_fee.
+  */
+  struct TALER_Amount brutto;
+
+  /**
+  * Maximum fee as given by the client request.
+  */
+  struct TALER_Amount max_fee;
+};
+
 /**
 * Possible input types for the contract terms.
 */
-enum TALER_MerchantContractInputType
+enum TALER_MerchantContractV1InputType
 {
 
   /**
@@ -58,12 +108,12 @@ enum TALER_MerchantContractInputType
 /**
 * Contract input (part of the v1 contract terms).
 */
-struct TALER_MerchantContractInput
+struct TALER_MerchantContractV1Input
 {
   /**
   * Type of the input.
   */
-  enum TALER_MerchantContractInputType type;
+  enum TALER_MerchantContractV1InputType type;
 
   union
   {
@@ -101,7 +151,7 @@ struct TALER_MerchantContractInput
 /**
 * Possible output types for the contract terms.
 */
-enum TALER_MerchantContractOutputType
+enum TALER_MerchantContractV1OutputType
 {
 
   /**
@@ -124,7 +174,7 @@ enum TALER_MerchantContractOutputType
 /**
 * Possible token output classes.
 */
-enum TALER_MerchantContractOutputTokenClass
+enum TALER_MerchantContractV1OutputTokenClass
 {
 
   /**
@@ -141,12 +191,12 @@ enum TALER_MerchantContractOutputTokenClass
 /**
 * Contract output (part of the v1 contract terms).
 */
-struct TALER_MerchantContractOutput
+struct TALER_MerchantContractV1Output
 {
   /**
   * Type of the output.
   */
-  enum TALER_MerchantContractOutputType type;
+  enum TALER_MerchantContractV1OutputType type;
 
   union
   {
@@ -195,7 +245,7 @@ struct TALER_MerchantContractOutput
       /**
       * Class of token that will be yielded.
       */
-      enum TALER_MerchantContractOutputTokenClass token_class;
+      enum TALER_MerchantContractV1OutputTokenClass token_class;
 
       /**
       * Information about the class of token that will be yielded.
@@ -261,7 +311,7 @@ struct TALER_MerchantContractOutput
 /**
 * Contract choice (part of the v1 contract terms).
 */
-struct TALER_MerchantContractChoice
+struct TALER_MerchantContractV1Choice
 {
   /**
   * Summary of the order.
@@ -299,7 +349,7 @@ struct TALER_MerchantContractChoice
   * List of inputs the wallet must provision (all of them) to satisfy the
   * conditions for the contract.
   */
-  struct TALER_MerchantContractInput *inputs;
+  struct TALER_MerchantContractV1Input *inputs;
 
   /**
   * Length of the @e inputs array.
@@ -310,10 +360,184 @@ struct TALER_MerchantContractChoice
   * List of outputs the merchant promises to yield (all of them) once
   * the contract is paid.
   */
-  struct TALER_MerchantContractOutput *ouputs;
+  struct TALER_MerchantContractV1Output *ouputs;
 
   /**
   * Length of the @e outputs array.
   */
   unsigned int outputs_len;
-}
\ No newline at end of file
+};
+
+/**
+* Contract fields specific to v1 contract format.
+*/
+struct TALER_MerchantContractV1
+{
+  /**
+  * Array of possible specific contracts the wallet/customer may choose
+  * from by selecting the respective index when signing the deposit
+  * confirmation.
+  */
+  struct TALER_MerchantContractV1Choice *choices;
+
+  /**
+  * Length of the @e choices array.
+  */
+  unsigned int choices_len;
+
+  /**
+  * TODO: This was moved out a level: Change design document according to this.
+  * Array of token authorities.
+  */
+  struct
+  {
+    /**
+    * Label of the token authority.
+    */
+    const char *label;
+
+    /**
+    * Human-readable description of the semantics of the tokens issued by
+    * this authority.
+    */
+    const char *summary;
+
+    /**
+    * Map from IETF BCP 47 language tags to localized summaries.
+    */
+    json_t *summary_i18n;
+
+    /**
+    * Public key used to validate tokens signed by this authority.
+    */
+    struct TALER_TokenFamilyPublicKey key;
+
+    /**
+    * When will tokens signed by this key expire?
+    */
+    struct GNUNET_TIME_Timestamp token_expiration;
+
+  } *token_authorities;
+
+  /**
+  * Length of the @e token_authorities array.
+  */
+  unsigned int token_authorities_len;
+
+  /**
+  * TODO: Model this
+  * Fee limits and wire account details by currency.
+  * limits: { [currency:string] : CurrencyLimit };
+  */
+};
+
+/**
+* Struct to hold contract terms in v0 and v1 format. Shared fields are on the
+* top level, while version specific fields are in the respective sub-structs.
+*/
+struct TALER_MerchantContract
+{
+  /**
+  * URL where the same contract could be ordered again (if available).
+  */
+  const char *public_reorder_url;
+
+  /**
+  * Our order ID.
+  */
+  const char *order_id;
+
+  /**
+  * Merchant base URL.
+  */
+  char *merchant_base_url;
+
+  /**
+  * Timestamp of the order.
+  */
+  struct GNUNET_TIME_Timestamp timestamp;
+
+  /**
+  * Deadline for refunds.
+  */
+  struct GNUNET_TIME_Timestamp refund_deadline;
+
+  /**
+  * Specifies for how long the wallet should try to get an
+  * automatic refund for the purchase.
+  */
+  struct GNUNET_TIME_Relative auto_refund;
+
+  /**
+  * Payment deadline.
+  */
+  struct GNUNET_TIME_Timestamp pay_deadline;
+
+  /**
+  * Wire transfer deadline.
+  */
+  struct GNUNET_TIME_Timestamp wire_deadline;
+
+  /**
+  * Delivery date.
+  */
+  struct GNUNET_TIME_Timestamp delivery_date;
+
+  /**
+  * Delivery location.
+  */
+  json_t *delivery_location;
+
+  /**
+  * Nonce generated by the wallet and echoed by the merchant
+  * in this field when the proposal is generated.
+  */
+  const char *nonce;
+
+  /**
+  * Extra data that is only interpreted by the merchant frontend.
+  */
+  const json_t *extra;
+
+  /**
+  * Specified version of the order.
+  */
+  enum TALER_MerchantContractVersion version;
+
+  /**
+  * Contract information in v0 format.
+  */
+  struct TALER_MerchantContractV0 v0;
+
+  /**
+  * Order information passed in in v1 format.
+  */
+  struct TALER_MerchantContractV1 v1;
+};
+
+/**
+ * Serialize @a contract to a JSON object, ready to be stored in the database.
+ * The @a contract can be of v0 or v1.
+ *
+ * @param[in] contract contract struct to serialize
+ * @param[out] out serialized contract as JSON object
+ * @return #GNUNET_OK on success
+ *         #GNUNET_NO if @a contract was not valid
+ *         #GNUNET_SYSERR on failure
+ */
+enum GNUNET_GenericReturnValue
+TMH_serialize_contract (const struct TALER_MerchantContract *contract,
+                        json_t **out);
+
+enum GNUNET_GenericReturnValue
+TMH_serialize_contract_v0 (const struct TALER_MerchantContract *contract,
+                           const struct TMH_MerchantInstance *instance,
+                           const struct TMH_WireMethod *wm,
+                           json_t *exchanges,
+                           json_t *products,
+                           struct TALER_Amount *max_fee,
+                           json_t **out);
+
+enum GNUNET_GenericReturnValue
+TMH_serialize_contract_v1 (const struct TALER_MerchantContract *contract,
+                           json_t **out);
\ No newline at end of file
diff --git a/src/backend/taler-merchant-httpd_private-post-orders.c 
b/src/backend/taler-merchant-httpd_private-post-orders.c
index f886d9f2..1440dcc4 100644
--- a/src/backend/taler-merchant-httpd_private-post-orders.c
+++ b/src/backend/taler-merchant-httpd_private-post-orders.c
@@ -226,201 +226,7 @@ struct OrderContext
    */
   struct
   {
-    /**
-    * Specified version of the order.
-    */
-    enum TALER_MerchantContractVersion version;
-
-    /**
-    * URL where the same contract could be ordered again (if available).
-    */
-    const char *public_reorder_url;
-
-    /**
-    * Our order ID.
-    */
-    const char *order_id;
-
-    /**
-    * Merchant base URL.
-    */
-    char *merchant_base_url;
-
-    /**
-    * TODO: Maybe remove this and set it from settings where we serialize
-    *       the order to JSON?
-    *
-    * Merchant's public key
-    */
-    struct TALER_MerchantPublicKeyP merchant_pub;
-
-    /**
-    * TODO: Maybe remove this and set it from settings where we serialize
-    *       the order to JSON?
-    *
-    * Information like name, website, email, etc. about the merchant.
-    */
-    json_t *merchant;
-
-    /**
-    * Timestamp of the order.
-    */
-    struct GNUNET_TIME_Timestamp timestamp;
-
-    /**
-    * Deadline for refunds.
-    */
-    struct GNUNET_TIME_Timestamp refund_deadline;
-
-    /**
-    * Specifies for how long the wallet should try to get an
-    * automatic refund for the purchase.
-    */
-    struct GNUNET_TIME_Relative auto_refund;
-
-    /**
-    * Payment deadline.
-    */
-    struct GNUNET_TIME_Timestamp pay_deadline;
-
-    /**
-    * Wire transfer deadline.
-    */
-    struct GNUNET_TIME_Timestamp wire_deadline;
-
-    /**
-    * Delivery date.
-    */
-    struct GNUNET_TIME_Timestamp delivery_date;
-
-    /**
-    * Delivery location.
-    */
-    json_t *delivery_location;
-
-    /**
-    * Nonce generated by the wallet and echoed by the merchant
-    * in this field when the proposal is generated.
-    */
-    const char *nonce;
-
-    /**
-    * Extra data that is only interpreted by the merchant frontend.
-    */
-    const json_t *extra;
-
-    /**
-    * Order information in v0 format.
-    */
-    struct
-    {
-      /**
-      * Summary of the order.
-      */
-      const char *summary;
-
-      /**
-      * Internationalized summary.
-      */
-      json_t *summary_i18n;
-
-      /**
-      * URL that will show that the order was successful
-      * after it has been paid for.
-      */
-      const char *fulfillment_url;
-
-      /**
-      * Message shown to the customer after paying for the order.
-      * Either fulfillment_url or fulfillment_message must be specified.
-      */
-      const char *fulfillment_message;
-
-      /**
-      * Map from IETF BCP 47 language tags to localized fulfillment messages.
-      */
-      json_t *fulfillment_message_i18n;
-
-      /**
-      * Array of products that are part of the purchase.
-      */
-      const json_t *products;
-
-      /**
-      * Gross amount value of the contract. Used to
-      * compute @e max_stefan_fee.
-      */
-      struct TALER_Amount brutto;
-
-      /**
-      * Maximum fee as given by the client request.
-      */
-      struct TALER_Amount max_fee;
-    } v0;
-
-    /**
-    * Order information passed in in v1 format.
-    */
-    struct
-    {
-      /**
-      * Array of possible specific contracts the wallet/customer may choose
-      * from by selecting the respective index when signing the deposit
-      * confirmation.
-      */
-      struct TALER_MerchantContractChoice *choices;
-
-      /**
-      * Length of the @e choices array.
-      */
-      unsigned int choices_len;
-
-      /**
-      * TODO: This was moved out a level: Change design document according to 
this.
-      * Array of token authorities.
-      */
-      struct
-      {
-        /**
-        * Label of the token authority.
-        */
-        const char *label;
-
-        /**
-        * Human-readable description of the semantics of the tokens issued by
-        * this authority.
-        */
-        const char *summary;
-
-        /**
-        * Map from IETF BCP 47 language tags to localized summaries.
-        */
-        json_t *summary_i18n;
-
-        /**
-        * Public key used to validate tokens signed by this authority.
-        */
-        struct TALER_TokenFamilyPublicKey key;
-
-        /**
-        * When will tokens signed by this key expire?
-        */
-        struct GNUNET_TIME_Timestamp token_expiration;
-
-      } *token_authorities;
-
-      /**
-      * Length of the @e token_authorities array.
-      */
-      unsigned int token_authorities_len;
-
-      /**
-      * TODO: Model this
-      * Fee limits and wire account details by currency.
-      * limits: { [currency:string] : CurrencyLimit };
-      */
-    } v1;
-
+    struct TALER_MerchantContract contract;
   } parse_order;
 
   /**
@@ -677,11 +483,6 @@ clean_order (void *cls)
     json_decref (oc->set_exchanges.exchanges);
     oc->set_exchanges.exchanges = NULL;
   }
-  if (NULL != oc->parse_order.merchant)
-  {
-    json_decref (oc->parse_order.merchant);
-    oc->parse_order.merchant = NULL;
-  }
   if (NULL != oc->parse_order.fulfillment_message_i18n)
   {
     json_decref (oc->parse_order.fulfillment_message_i18n);
@@ -1336,86 +1137,18 @@ get_exchange_keys (void *cls,
 static void
 serialize_order (struct OrderContext *oc)
 {
-  oc->serialize_order.contract = GNUNET_JSON_PACK (
-    GNUNET_JSON_pack_string ("summary",
-                             oc->parse_order.summary),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_object_incref ("summary_i18n",
-                                      oc->parse_order.summary_i18n)),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_string ("public_reorder_url",
-                               oc->parse_order.public_reorder_url)),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_string ("fulfillment_message",
-                               oc->parse_order.fulfillment_message)),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_object_incref ("fulfillment_message_i18n",
-                                      
oc->parse_order.fulfillment_message_i18n)),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_string ("fulfillment_url",
-                               oc->parse_order.fulfillment_url)),
-    GNUNET_JSON_pack_array_incref ("products",
-                                   oc->merge_inventory.products),
-    GNUNET_JSON_pack_data_auto ("h_wire",
-                                &oc->add_payment_details.wm->h_wire),
-    GNUNET_JSON_pack_string ("wire_method",
-                             oc->add_payment_details.wm->wire_method),
-    GNUNET_JSON_pack_string ("order_id",
-                             oc->parse_order.order_id),
-    GNUNET_JSON_pack_timestamp ("timestamp",
-                                oc->parse_order.timestamp),
-    GNUNET_JSON_pack_timestamp ("pay_deadline",
-                                oc->parse_order.pay_deadline),
-    GNUNET_JSON_pack_timestamp ("wire_transfer_deadline",
-                                oc->parse_order.wire_deadline),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_timestamp ("delivery_date",
-                                  oc->parse_order.delivery_date)),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_object_incref ("delivery_location",
-                                      oc->parse_order.delivery_location)),
-    GNUNET_JSON_pack_string ("merchant_base_url",
-                             oc->parse_order.merchant_base_url),
-    GNUNET_JSON_pack_object_incref ("merchant",
-                                    oc->parse_order.merchant),
-    GNUNET_JSON_pack_data_auto ("merchant_pub",
-                                &oc->hc->instance->merchant_pub),
-    GNUNET_JSON_pack_array_incref ("exchanges",
-                                   oc->set_exchanges.exchanges),
-    TALER_JSON_pack_amount ("max_fee",
-                            &oc->set_max_fee.max_fee),
-    TALER_JSON_pack_amount ("amount",
-                            &oc->parse_order.brutto),
-    GNUNET_JSON_pack_allow_null (
-      GNUNET_JSON_pack_object_incref ("extra",
-                                      (json_t *) oc->parse_order.extra))
-    );
-
-  /* Pack does not work here, because it doesn't set zero-values for 
timestamps */
-  GNUNET_assert (0 ==
-                 json_object_set_new (oc->serialize_order.contract,
-                                      "refund_deadline",
-                                      GNUNET_JSON_from_timestamp (
-                                        oc->parse_order.refund_deadline)));
-  GNUNET_log (
-    GNUNET_ERROR_TYPE_INFO,
-    "Refund deadline for contact is %llu\n",
-    (unsigned long long) 
oc->parse_order.refund_deadline.abs_time.abs_value_us);
-  GNUNET_log (
-    GNUNET_ERROR_TYPE_INFO,
-    "Wallet timestamp for contact is %llu\n",
-    (unsigned long long) oc->parse_order.timestamp.abs_time.abs_value_us);
-
-  /* Pack does not work here, because it sets zero-values for relative times */
-  /* auto_refund should only be set if it is not 0 */
-  if (! GNUNET_TIME_relative_is_zero (oc->parse_order.auto_refund))
-  {
-    GNUNET_assert (0 ==
-                   json_object_set_new (oc->serialize_order.contract,
-                                        "auto_refund",
-                                        GNUNET_JSON_from_time_rel (
-                                          oc->parse_order.auto_refund)));
-  }
+  const struct TALER_MERCHANTDB_InstanceSettings *settings =
+    &oc->hc->instance->settings;
+
+  ret = TMH_serialize_contract_v0(
+    oc->parse_order.contract,
+    oc->hc->instance,
+    oc->add_payment_details.wm,
+    oc->set_exchanges.exchanges,
+    oc->merge_inventory.products,
+    oc->set_max_fee.max_fee,
+    oc->serialize_order.contract
+  );
 
   oc->phase++;
 }
@@ -1929,53 +1662,6 @@ parse_order_v0 (struct OrderContext *oc)
     return;
   }
 
-  {
-    oc->parse_order.merchant = GNUNET_JSON_PACK (
-      GNUNET_JSON_pack_string ("name",
-                               settings->name),
-      GNUNET_JSON_pack_allow_null (
-        GNUNET_JSON_pack_string ("website",
-                                 settings->website)),
-      GNUNET_JSON_pack_allow_null (
-        GNUNET_JSON_pack_string ("email",
-                                 settings->email)),
-      GNUNET_JSON_pack_allow_null (
-        GNUNET_JSON_pack_string ("logo",
-                                 settings->logo)));
-    GNUNET_assert (NULL != oc->parse_order.merchant);
-    {
-      json_t *loca;
-
-      /* Handle merchant address */
-      loca = settings->address;
-      if (NULL != loca)
-      {
-        loca = json_deep_copy (loca);
-        GNUNET_assert (NULL != loca);
-        GNUNET_assert (0 ==
-                       json_object_set_new (oc->parse_order.merchant,
-                                            "address",
-                                            loca));
-      }
-    }
-    {
-      json_t *juri;
-
-      /* Handle merchant jurisdiction */
-      juri = settings->jurisdiction;
-      if (NULL != juri)
-      {
-        juri = json_deep_copy (juri);
-        GNUNET_assert (NULL != juri);
-        GNUNET_assert (0 ==
-                       json_object_set_new (oc->parse_order.merchant,
-                                            "jurisdiction",
-                                            juri));
-      }
-    }
-  }
-
-  oc->parse_order.merchant_pub = oc->hc->instance->merchant_pub;
   if ( (NULL != oc->parse_order.delivery_location) &&
        (! TMH_location_object_valid (oc->parse_order.delivery_location)) )
   {

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