gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: updating logic to use new deposi


From: gnunet
Subject: [taler-merchant] branch master updated: updating logic to use new depositcheck tooling (not yet working)
Date: Sat, 06 Jan 2024 20:24:08 +0100

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 b1ccf194 updating logic to use new depositcheck tooling (not yet 
working)
b1ccf194 is described below

commit b1ccf194316920ff1898cca8c1a34169470dc164
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Jan 6 20:24:05 2024 +0100

    updating logic to use new depositcheck tooling (not yet working)
---
 .../taler-merchant-httpd_private-get-orders-ID.c   | 464 +--------------------
 src/include/taler_merchant_service.h               |  24 +-
 src/include/taler_merchant_testing_lib.h           |  11 +
 src/lib/Makefile.am                                |   2 +-
 src/lib/merchant_api_merchant_get_order.c          |  45 +-
 src/testing/Makefile.am                            |   1 +
 src/testing/test_kyc_api.c                         |  23 +-
 src/testing/testing_api_cmd_depositcheck.c         | 162 +++++++
 src/testing/testing_api_cmd_merchant_get_order.c   |   4 +-
 9 files changed, 204 insertions(+), 532 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c 
b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
index 4f7959bd..fb8b9dd5 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -30,13 +30,6 @@
 #include "taler-merchant-httpd_private-get-orders.h"
 
 
-/**
- * How long do we wait on the exchange?
- */
-#define EXCHANGE_TIMEOUT GNUNET_TIME_relative_multiply ( \
-    GNUNET_TIME_UNIT_SECONDS, 30)
-
-
 /**
  * Data structure we keep for a check payment request.
  */
@@ -65,16 +58,6 @@ struct TransferQuery
    */
   char *exchange_url;
 
-  /**
-   * Handle to query exchange about deposit status.
-   */
-  struct TALER_EXCHANGE_DepositGetHandle *dgh;
-
-  /**
-   * Handle for ongoing exchange operation.
-   */
-  struct TMH_EXCHANGES_KeysOperation *fo;
-
   /**
    * Overall request this TQ belongs with.
    */
@@ -153,48 +136,41 @@ enum GetOrderPhase
   GOP_CHECK_REFUNDS = 6,
 
   /**
-   * Check if the exchange transferred the funds to
-   * the merchant.
+   * Load all deposits associated with the order.
    */
-  GOP_CHECK_EXCHANGE_TRANSFERS = 7,
-
-  /**
-   * We are suspended awaiting a response from the
-   * exchange.
-   */
-  GOP_SUSPENDED_ON_EXCHANGE = 8,
+  GOP_CHECK_DEPOSITS = 7,
 
   /**
    * Check local records for transfers of funds to
    * the merchant.
    */
-  GOP_CHECK_LOCAL_TRANSFERS = 9,
+  GOP_CHECK_LOCAL_TRANSFERS = 8,
 
   /**
    * Generate final comprehensive result.
    */
-  GOP_REPLY_RESULT = 10,
+  GOP_REPLY_RESULT = 9,
 
   /**
    * End with the HTTP status and error code in
    * wire_hc and wire_ec.
    */
-  GOP_ERROR = 11,
+  GOP_ERROR = 10,
 
   /**
    * We are suspended awaiting payment.
    */
-  GOP_SUSPENDED_ON_UNPAID = 12,
+  GOP_SUSPENDED_ON_UNPAID = 11,
 
   /**
    * Processing is done, return #MHD_YES.
    */
-  GOP_END_YES = 13,
+  GOP_END_YES = 12,
 
   /**
    * Processing is done, return #MHD_NO.
    */
-  GOP_END_NO = 14
+  GOP_END_NO = 13
 
 };
 
@@ -297,12 +273,6 @@ struct GetOrderRequestContext
    */
   json_t *wire_details;
 
-  /**
-   * Problems we encountered when looking up Wire details
-   * for the payment, to be returned.  NULL if not available.
-   */
-  json_t *wire_reports;
-
   /**
    * Details about refunds, NULL if there are no refunds.
    */
@@ -412,12 +382,6 @@ struct GetOrderRequestContext
    */
   bool refund_pending;
 
-  /**
-   * Did the client request us to fetch the wire transfer status?
-   * If false, we may still return it if it is available.
-   */
-  bool transfer_status_requested;
-
   /**
    * Set to true if our database (incorrectly) has refunds
    * in a different currency than the currency of the
@@ -462,65 +426,6 @@ TMH_force_gorc_resume (void)
 }
 
 
-/**
- * Resume processing the request, cancelling all pending asynchronous
- * operations.
- *
- * @param gorc request to resume
- */
-static void
-gorc_resume (struct GetOrderRequestContext *gorc)
-{
-  struct TransferQuery *tq;
-
-  if (NULL != gorc->tt)
-  {
-    GNUNET_SCHEDULER_cancel (gorc->tt);
-    gorc->tt = NULL;
-  }
-  while (NULL != (tq = gorc->tq_head))
-  {
-    if (NULL != tq->fo)
-    {
-      TMH_EXCHANGES_keys4exchange_cancel (tq->fo);
-      tq->fo = NULL;
-    }
-    if (NULL != tq->dgh)
-    {
-      TALER_EXCHANGE_deposits_get_cancel (tq->dgh);
-      tq->dgh = NULL;
-    }
-  }
-  GNUNET_assert (GNUNET_YES == gorc->suspended);
-  GNUNET_CONTAINER_DLL_remove (gorc_head,
-                               gorc_tail,
-                               gorc);
-  gorc->suspended = GNUNET_NO;
-  MHD_resume_connection (gorc->sc.con);
-  TALER_MHD_daemon_trigger ();   /* we resumed, kick MHD */
-}
-
-
-/**
- * Resume processing the request, cancelling all pending asynchronous
- * operations.
- *
- * @param gorc request to resume
- * @param http_status HTTP status to return, 0 to continue with success
- * @param ec error code for the request, #TALER_EC_NONE on success
- */
-static void
-gorc_resume_error (struct GetOrderRequestContext *gorc,
-                   unsigned int http_status,
-                   enum TALER_ErrorCode ec)
-{
-  gorc->wire_hc = http_status;
-  gorc->wire_ec = ec;
-  gorc->phase = GOP_ERROR;
-  gorc_resume (gorc);
-}
-
-
 /**
  * We have received a trigger from the database
  * that we should (possibly) resume the request.
@@ -553,58 +458,6 @@ resume_by_event (void *cls,
 }
 
 
-/**
- * Add a report about trouble obtaining wire transfer data to the reply.
- *
- * @param gorc request to add wire report to
- * @param ec error code to add
- * @param coin_pub public key of the affected coin
- * @param exchange_hr details from exchange, NULL if exchange is blameless
- */
-static void
-gorc_report (struct GetOrderRequestContext *gorc,
-             enum TALER_ErrorCode ec,
-             struct TALER_CoinSpendPublicKeyP *coin_pub,
-             const struct TALER_EXCHANGE_HttpResponse *exchange_hr)
-{
-  if (NULL != exchange_hr)
-    GNUNET_assert (0 ==
-                   json_array_append_new (
-                     gorc->wire_reports,
-                     GNUNET_JSON_PACK (
-                       TALER_JSON_pack_ec (ec),
-                       TMH_pack_exchange_reply (exchange_hr),
-                       GNUNET_JSON_pack_data_auto ("coin_pub",
-                                                   coin_pub))));
-  else
-    GNUNET_assert (0 ==
-                   json_array_append_new (
-                     gorc->wire_reports,
-                     GNUNET_JSON_PACK (
-                       TALER_JSON_pack_ec (ec),
-                       GNUNET_JSON_pack_data_auto ("coin_pub",
-                                                   coin_pub))));
-}
-
-
-/**
- * Timeout trying to get current wire transfer data from the exchange.
- * Clean up and continue.
- *
- * @param cls closure, must be a `struct GetOrderRequestContext *`
- */
-static void
-exchange_timeout_cb (void *cls)
-{
-  struct GetOrderRequestContext *gorc = cls;
-
-  gorc->tt = NULL;
-  gorc_resume_error (gorc,
-                     MHD_HTTP_REQUEST_TIMEOUT,
-                     TALER_EC_GENERIC_TIMEOUT);
-}
-
-
 /**
  * Clean up the session state for a GET /private/order/ID request.
  *
@@ -621,8 +474,6 @@ gorc_cleanup (void *cls)
     json_decref (gorc->wire_details);
   if (NULL != gorc->refund_details)
     json_decref (gorc->refund_details);
-  if (NULL != gorc->wire_reports)
-    json_decref (gorc->wire_reports);
   if (NULL != gorc->tt)
   {
     GNUNET_SCHEDULER_cancel (gorc->tt);
@@ -1244,243 +1095,6 @@ phase_check_refunds (struct GetOrderRequestContext 
*gorc)
 }
 
 
-/**
- * Function called with detailed wire transfer data.
- *
- * @param cls closure with a `struct TransferQuery *`
- * @param dr HTTP response data
- */
-static void
-deposit_get_cb (void *cls,
-                const struct TALER_EXCHANGE_GetDepositResponse *dr)
-{
-  struct TransferQuery *tq = cls;
-  struct GetOrderRequestContext *gorc = tq->gorc;
-
-  GNUNET_CONTAINER_DLL_remove (gorc->tq_head,
-                               gorc->tq_tail,
-                               tq);
-  switch (dr->hr.http_status)
-  {
-  case MHD_HTTP_OK:
-    {
-      enum GNUNET_DB_QueryStatus qs;
-
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Exchange returned wire transfer over %s for deposited coin 
%s\n",
-                  TALER_amount2s (&dr->details.ok.coin_contribution),
-                  TALER_B2S (&tq->coin_pub));
-      qs = TMH_db->insert_deposit_to_transfer (TMH_db->cls,
-                                               tq->deposit_serial,
-                                               &dr->details.ok);
-      if (qs < 0)
-      {
-        gorc_report (gorc,
-                     TALER_EC_GENERIC_DB_STORE_FAILED,
-                     &tq->coin_pub,
-                     NULL);
-        GNUNET_free (tq->exchange_url);
-        GNUNET_free (tq);
-        if (NULL == gorc->tq_head)
-        {
-          gorc->phase++;
-          gorc_resume (gorc);
-        }
-        return;
-      }
-      /* Compute total amount *wired* */
-      if ( (GNUNET_OK !=
-            TALER_amount_cmp_currency (
-              &gorc->deposits_total,
-              &dr->details.ok.coin_contribution)) ||
-           (GNUNET_OK !=
-            TALER_amount_cmp_currency (
-              &gorc->deposit_fees_total,
-              &tq->deposit_fee)) )
-      {
-        /* something very wrong in our database ... */
-        GNUNET_break (0);
-        gorc_report (gorc,
-                     TALER_EC_GENERIC_DB_FETCH_FAILED,
-                     &tq->coin_pub,
-                     NULL);
-        GNUNET_free (tq->exchange_url);
-        GNUNET_free (tq);
-        if (NULL == gorc->tq_head)
-        {
-          gorc->phase++;
-          gorc_resume (gorc);
-        }
-        return;
-      }
-      if (0 >
-          TALER_amount_add (&gorc->deposits_total,
-                            &gorc->deposits_total,
-                            &dr->details.ok.coin_contribution))
-      {
-        gorc_report (gorc,
-                     
TALER_EC_MERCHANT_PRIVATE_GET_ORDERS_ID_AMOUNT_ARITHMETIC_FAILURE,
-                     &tq->coin_pub,
-                     NULL);
-        GNUNET_free (tq->exchange_url);
-        GNUNET_free (tq);
-        if (NULL == gorc->tq_head)
-        {
-          gorc->phase++;
-          gorc_resume (gorc);
-        }
-        return;
-      }
-      if (0 >
-          TALER_amount_add (&gorc->deposit_fees_total,
-                            &gorc->deposit_fees_total,
-                            &tq->deposit_fee))
-      {
-        gorc_report (gorc,
-                     
TALER_EC_MERCHANT_PRIVATE_GET_ORDERS_ID_AMOUNT_ARITHMETIC_FAILURE,
-                     &tq->coin_pub,
-                     NULL);
-        GNUNET_free (tq->exchange_url);
-        GNUNET_free (tq);
-        if (NULL == gorc->tq_head)
-        {
-          gorc->phase++;
-          gorc_resume (gorc);
-        }
-        return;
-      }
-      break;
-    }
-  case MHD_HTTP_ACCEPTED:
-    {
-      /* got a 'preliminary' reply from the exchange,
-         remember our target UUID */
-      enum GNUNET_DB_QueryStatus qs;
-      struct GNUNET_TIME_Timestamp now;
-
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Exchange returned KYC requirement (%d/%d) for deposited 
coin %s\n",
-                  dr->details.accepted.kyc_ok,
-                  dr->details.accepted.aml_decision,
-                  TALER_B2S (&tq->coin_pub));
-      now = GNUNET_TIME_timestamp_get ();
-      qs = TMH_db->account_kyc_set_status (
-        TMH_db->cls,
-        gorc->hc->instance->settings.id,
-        &tq->h_wire,
-        tq->exchange_url,
-        dr->details.accepted.requirement_row,
-        NULL,
-        NULL,
-        now,
-        dr->details.accepted.kyc_ok,
-        dr->details.accepted.aml_decision);
-      if (qs < 0)
-      {
-        gorc_report (gorc,
-                     TALER_EC_GENERIC_DB_STORE_FAILED,
-                     &tq->coin_pub,
-                     NULL);
-        GNUNET_free (tq->exchange_url);
-        GNUNET_free (tq);
-        if (NULL == gorc->tq_head)
-        {
-          gorc->phase++;
-          gorc_resume (gorc);
-        }
-        return;
-      }
-      gorc_report (gorc,
-                   TALER_EC_NONE,
-                   &tq->coin_pub,
-                   &dr->hr);
-      break;
-    }
-  default:
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Exchange returned tracking failure for deposited coin %s\n",
-                  TALER_B2S (&tq->coin_pub));
-      gorc_report (gorc,
-                   TALER_EC_MERCHANT_GET_ORDERS_EXCHANGE_TRACKING_FAILURE,
-                   &tq->coin_pub,
-                   &dr->hr);
-      GNUNET_free (tq->exchange_url);
-      GNUNET_free (tq);
-      if (NULL == gorc->tq_head)
-      {
-        gorc->phase++;
-        gorc_resume (gorc);
-      }
-      return;
-    }
-  } /* end switch */
-  GNUNET_free (tq->exchange_url);
-  GNUNET_free (tq);
-  if (NULL != gorc->tq_head)
-    return;
-  /* *all* are done, resume! */
-  gorc->phase++;
-  gorc_resume (gorc);
-}
-
-
-/**
- * Function called with the result of a #TMH_EXCHANGES_keys4exchange()
- * operation.
- *
- * @param cls closure with a `struct GetOrderRequestContext *`
- * @param keys keys of the exchange
- * @param exchange representation of the exchange
- */
-static void
-exchange_found_cb (void *cls,
-                   struct TALER_EXCHANGE_Keys *keys,
-                   struct TMH_Exchange *exchange)
-{
-  struct TransferQuery *tq = cls;
-  struct GetOrderRequestContext *gorc = tq->gorc;
-
-  (void) exchange;
-  tq->fo = NULL;
-  if (NULL == keys)
-  {
-    /* failed */
-    GNUNET_CONTAINER_DLL_remove (gorc->tq_head,
-                                 gorc->tq_tail,
-                                 tq);
-    GNUNET_free (tq->exchange_url);
-    GNUNET_free (tq);
-    gorc_resume_error (gorc,
-                       MHD_HTTP_GATEWAY_TIMEOUT,
-                       TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT);
-    return;
-  }
-  tq->dgh = TALER_EXCHANGE_deposits_get (
-    TMH_curl_ctx,
-    tq->exchange_url,
-    keys,
-    &gorc->hc->instance->merchant_priv,
-    &tq->h_wire,
-    &gorc->h_contract_terms,
-    &tq->coin_pub,
-    GNUNET_TIME_UNIT_ZERO,
-    &deposit_get_cb,
-    tq);
-  if (NULL == tq->dgh)
-  {
-    GNUNET_CONTAINER_DLL_remove (gorc->tq_head,
-                                 gorc->tq_tail,
-                                 tq);
-    GNUNET_free (tq->exchange_url);
-    GNUNET_free (tq);
-    gorc_resume_error (gorc,
-                       MHD_HTTP_INTERNAL_SERVER_ERROR,
-                       
TALER_EC_MERCHANT_GET_ORDERS_ID_EXCHANGE_REQUEST_FAILURE);
-  }
-}
-
-
 /**
  * Function called with each @a coin_pub that was deposited into the
  * @a h_wire account of the merchant for the @a deposit_serial as part
@@ -1524,16 +1138,6 @@ deposit_cb (void *cls,
   tq->h_wire = *h_wire;
   tq->amount_with_fee = *amount_with_fee;
   tq->deposit_fee = *deposit_fee;
-  tq->fo = TMH_EXCHANGES_keys4exchange (exchange_url,
-                                        false,
-                                        &exchange_found_cb,
-                                        tq);
-  if (NULL == tq->fo)
-  {
-    gorc_resume_error (gorc,
-                       MHD_HTTP_INTERNAL_SERVER_ERROR,
-                       
TALER_EC_MERCHANT_GET_ORDERS_ID_EXCHANGE_LOOKUP_START_FAILURE);
-  }
 }
 
 
@@ -1543,16 +1147,8 @@ deposit_cb (void *cls,
  * @param[in,out] gorc order context to update
  */
 static void
-phase_check_exchange_transfers (struct GetOrderRequestContext *gorc)
+phase_check_deposits (struct GetOrderRequestContext *gorc)
 {
-  if (gorc->wired ||
-      (! gorc->transfer_status_requested) )
-  {
-    gorc->phase = GOP_CHECK_LOCAL_TRANSFERS;
-    return;
-  }
-  /* suspend connection, wait for exchange to check wire transfer status there 
*/
-  gorc->transfer_status_requested = false;     /* only try ONCE */
   GNUNET_assert (GNUNET_OK ==
                  TALER_amount_set_zero (gorc->contract_amount.currency,
                                         &gorc->deposits_total));
@@ -1563,22 +1159,7 @@ phase_check_exchange_transfers (struct 
GetOrderRequestContext *gorc)
                                     gorc->order_serial,
                                     &deposit_cb,
                                     gorc);
-  if (NULL == gorc->tq_head)
-  {
-    /* No deposits found for paid order. This is strange... */
-    GNUNET_break (0);
-    gorc->phase = GOP_CHECK_LOCAL_TRANSFERS;
-    return;
-  }
   gorc->phase++;
-  GNUNET_CONTAINER_DLL_insert (gorc_head,
-                               gorc_tail,
-                               gorc);
-  gorc->suspended = GNUNET_YES;
-  MHD_suspend_connection (gorc->sc.con);
-  gorc->tt = GNUNET_SCHEDULER_add_delayed (EXCHANGE_TIMEOUT,
-                                           &exchange_timeout_cb,
-                                           gorc);
 }
 
 
@@ -1784,8 +1365,9 @@ phase_reply_result (struct GetOrderRequestContext *gorc)
   ret = TALER_MHD_REPLY_JSON_PACK (
     gorc->sc.con,
     MHD_HTTP_OK,
+    // Deprecated in protocol v6.
     GNUNET_JSON_pack_array_steal ("wire_reports",
-                                  gorc->wire_reports),
+                                  json_array ()),
     GNUNET_JSON_pack_uint64 ("exchange_code",
                              gorc->exchange_ec),
     GNUNET_JSON_pack_uint64 ("exchange_http_status",
@@ -1818,7 +1400,6 @@ phase_reply_result (struct GetOrderRequestContext *gorc)
                              order_status_url));
   GNUNET_free (order_status_url);
   gorc->wire_details = NULL;
-  gorc->wire_reports = NULL;
   gorc->refund_details = NULL;
   phase_end (gorc,
              ret);
@@ -1862,24 +1443,9 @@ TMH_private_get_orders_ID (const struct 
TMH_RequestHandler *rh,
     GNUNET_assert (NULL != gorc->wire_details);
     gorc->refund_details = json_array ();
     GNUNET_assert (NULL != gorc->refund_details);
-    gorc->wire_reports = json_array ();
-    GNUNET_assert (NULL != gorc->wire_reports);
     gorc->session_id = MHD_lookup_connection_value (connection,
                                                     MHD_GET_ARGUMENT_KIND,
                                                     "session_id");
-    /* process 'transfer' argument */
-    {
-      const char *transfer_s;
-
-      transfer_s = MHD_lookup_connection_value (connection,
-                                                MHD_GET_ARGUMENT_KIND,
-                                                "transfer");
-      if ( (NULL != transfer_s) &&
-           (0 == strcasecmp (transfer_s,
-                             "yes")) )
-        gorc->transfer_status_requested = true;
-    }
-
     TALER_MHD_parse_request_timeout (connection,
                                      &gorc->sc.long_poll_timeout);
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -1919,8 +1485,8 @@ TMH_private_get_orders_ID (const struct 
TMH_RequestHandler *rh,
     case GOP_CHECK_REFUNDS:
       phase_check_refunds (gorc);
       break;
-    case GOP_CHECK_EXCHANGE_TRANSFERS:
-      phase_check_exchange_transfers (gorc);
+    case GOP_CHECK_DEPOSITS:
+      phase_check_deposits (gorc);
       break;
     case GOP_CHECK_LOCAL_TRANSFERS:
       phase_check_local_transfers (gorc);
@@ -1935,10 +1501,6 @@ TMH_private_get_orders_ID (const struct 
TMH_RequestHandler *rh,
       GNUNET_log (GNUNET_ERROR_TYPE_INFO,
                   "Suspending order request awaiting payment\n");
       return MHD_YES;
-    case GOP_SUSPENDED_ON_EXCHANGE:
-      GNUNET_log (GNUNET_ERROR_TYPE_INFO,
-                  "Suspending order request awaiting answer from exchange\n");
-      return MHD_YES;
     case GOP_END_YES:
       return MHD_YES;
     case GOP_END_NO:
diff --git a/src/include/taler_merchant_service.h 
b/src/include/taler_merchant_service.h
index aeddefc8..1de69e27 100644
--- a/src/include/taler_merchant_service.h
+++ b/src/include/taler_merchant_service.h
@@ -32,7 +32,7 @@
 /**
  * Library version (in hex) for compatibility tests.
  */
-#define TALER_MERCHANT_SERVICE_VERSION 0x00090400
+#define TALER_MERCHANT_SERVICE_VERSION 0x00090401
 
 
 /**
@@ -329,7 +329,7 @@ struct TALER_MERCHANT_ExchangeConfigInfo
    * Master public key of the exchange.
    */
   struct TALER_MasterPublicKeyP master_pub;
-  
+
 };
 
 /**
@@ -380,11 +380,11 @@ struct TALER_MERCHANT_ConfigResponse
       unsigned int num_exchanges;
 
       /**
-       * Array details about exchanges trusted 
+       * Array details about exchanges trusted
        * by this merchant backend.
        */
       const struct TALER_MERCHANT_ExchangeConfigInfo *exchanges;
-      
+
     } ok;
   } details;
 };
@@ -947,7 +947,7 @@ TALER_MERCHANT_instance_delete_cancel (
  * @param arg request to cancel.
  */
 #define TALER_MERCHANT_instance_purge_cancel(arg) \
-        TALER_MERCHANT_instance_delete_cancel (arg)
+  TALER_MERCHANT_instance_delete_cancel (arg)
 
 
 /* *************** Accounts **************** */
@@ -2573,17 +2573,6 @@ struct TALER_MERCHANT_OrderStatusResponse
            */
           unsigned int wts_len;
 
-          /**
-           * Array of wire reports about problems tracking wire transfers.
-           * Of length @e wrs_len.
-           */
-          struct TALER_MERCHANT_WireReport *wrs;
-
-          /**
-           * Length of the @e wrs array.
-           */
-          unsigned int wrs_len;
-
           /**
            * Details returned by the merchant backend about refunds.
            * Of length @e refunds_len.
@@ -2704,8 +2693,6 @@ typedef void
  * @param order_id order id to identify the payment
  * @param session_id session id for the payment (or NULL if the check is not
  *                   bound to a session)
- * @param transfer if true, obtain the wire transfer status from the exchange.
- *               Otherwise, the wire transfer status MAY be returned if it is 
available.
  * @param timeout timeout to use in long polling (how long may the server wait 
to reply
  *        before generating an unpaid response). Note that this is just 
provided to
  *        the server, we as client will block until the response comes back or 
until
@@ -2719,7 +2706,6 @@ TALER_MERCHANT_merchant_order_get (struct 
GNUNET_CURL_Context *ctx,
                                    const char *backend_url,
                                    const char *order_id,
                                    const char *session_id,
-                                   bool transfer,
                                    struct GNUNET_TIME_Relative timeout,
                                    TALER_MERCHANT_OrderMerchantGetCallback cb,
                                    void *cb_cls);
diff --git a/src/include/taler_merchant_testing_lib.h 
b/src/include/taler_merchant_testing_lib.h
index 0f2e1faa..54d7f888 100644
--- a/src/include/taler_merchant_testing_lib.h
+++ b/src/include/taler_merchant_testing_lib.h
@@ -1902,6 +1902,17 @@ TALER_TESTING_cmd_webhook (const char *label,
                            const char *config_filename);
 
 
+/**
+ * Command to run the 'taler-merchant-depositcheck' program.
+ *
+ * @param label command label.
+ * @param config_filename configuration file used by the deposit check helper.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_depositcheck (const char *label,
+                                const char *config_filename);
+
+
 /**
  * Command to run the 'taler-merchant-exchange' program.
  *
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 41cd6674..5a6cda80 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -10,7 +10,7 @@ lib_LTLIBRARIES = \
   libtalermerchant.la
 
 libtalermerchant_la_LDFLAGS = \
-  -version-info 3:0:0 \
+  -version-info 4:0:0 \
   -no-undefined
 
 libtalermerchant_la_SOURCES = \
diff --git a/src/lib/merchant_api_merchant_get_order.c 
b/src/lib/merchant_api_merchant_get_order.c
index 5e3a5ead..9f10c347 100644
--- a/src/lib/merchant_api_merchant_get_order.c
+++ b/src/lib/merchant_api_merchant_get_order.c
@@ -168,7 +168,6 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle 
*omgh,
 {
   uint32_t hc32;
   const json_t *wire_details;
-  const json_t *wire_reports;
   const json_t *refund_details;
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_bool ("refunded",
@@ -190,8 +189,6 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle 
*omgh,
       &osr->details.ok.details.paid.contract_terms),
     GNUNET_JSON_spec_array_const ("wire_details",
                                   &wire_details),
-    GNUNET_JSON_spec_array_const ("wire_reports",
-                                  &wire_reports),
     GNUNET_JSON_spec_array_const ("refund_details",
                                   &refund_details),
     GNUNET_JSON_spec_end ()
@@ -210,14 +207,12 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle 
*omgh,
     return;
   }
   osr->details.ok.status = TALER_MERCHANT_OSC_PAID;
-  
+
   osr->details.ok.details.paid.exchange_hc = (unsigned int) hc32;
   {
     unsigned int wts_len = json_array_size (wire_details);
-    unsigned int wrs_len = json_array_size (wire_reports);
     unsigned int ref_len = json_array_size (refund_details);
     struct TALER_MERCHANT_WireTransfer wts[GNUNET_NZL (wts_len)];
-    struct TALER_MERCHANT_WireReport wrs[GNUNET_NZL (wrs_len)];
     struct TALER_MERCHANT_RefundOrderDetail ref[GNUNET_NZL (ref_len)];
 
     for (unsigned int i = 0; i<wts_len; i++)
@@ -253,40 +248,6 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle 
*omgh,
       }
     }
 
-    for (unsigned int i = 0; i<wrs_len; i++)
-    {
-      struct TALER_MERCHANT_WireReport *wr = &wrs[i];
-      const json_t *w = json_array_get (wire_reports, i);
-      uint32_t ehs32;
-      struct GNUNET_JSON_Specification ispec[] = {
-        TALER_JSON_spec_ec ("code",
-                            &wr->code),
-        GNUNET_JSON_spec_string ("hint",
-                                 &wr->hint),
-        TALER_JSON_spec_ec ("exchange_code",
-                            &wr->hr.ec),
-        GNUNET_JSON_spec_uint32 ("exchange_http_status",
-                                 &ehs32),
-        GNUNET_JSON_spec_fixed_auto ("coin_pub",
-                                     &wr->coin_pub),
-        GNUNET_JSON_spec_end ()
-      };
-
-      if (GNUNET_OK !=
-          GNUNET_JSON_parse (w,
-                             ispec,
-                             NULL, NULL))
-      {
-        GNUNET_break_op (0);
-        osr->hr.http_status = 0;
-        osr->hr.ec = TALER_EC_GENERIC_REPLY_MALFORMED;
-        omgh->cb (omgh->cb_cls,
-                  osr);
-        return;
-      }
-      wr->hr.http_status = (unsigned int) ehs32;
-    }
-
     for (unsigned int i = 0; i<ref_len; i++)
     {
       struct TALER_MERCHANT_RefundOrderDetail *ro = &ref[i];
@@ -318,8 +279,6 @@ handle_paid (struct TALER_MERCHANT_OrderMerchantGetHandle 
*omgh,
 
     osr->details.ok.details.paid.wts = wts;
     osr->details.ok.details.paid.wts_len = wts_len;
-    osr->details.ok.details.paid.wrs = wrs;
-    osr->details.ok.details.paid.wrs_len = wrs_len;
     osr->details.ok.details.paid.refunds = ref;
     osr->details.ok.details.paid.refunds_len = ref_len;
     omgh->cb (omgh->cb_cls,
@@ -445,7 +404,6 @@ TALER_MERCHANT_merchant_order_get (struct 
GNUNET_CURL_Context *ctx,
                                    const char *backend_url,
                                    const char *order_id,
                                    const char *session_id,
-                                   bool transfer,
                                    struct GNUNET_TIME_Relative timeout,
                                    TALER_MERCHANT_OrderMerchantGetCallback cb,
                                    void *cb_cls)
@@ -480,7 +438,6 @@ TALER_MERCHANT_merchant_order_get (struct 
GNUNET_CURL_Context *ctx,
     omgh->url = TALER_url_join (backend_url,
                                 path,
                                 "session_id", session_id,
-                                "transfer", transfer ? "YES" : "NO",
                                 "timeout_ms", (0 != tms) ? timeout_ms : NULL,
                                 NULL);
     GNUNET_free (path);
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index 341d6711..8a0afc9b 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -32,6 +32,7 @@ libtalermerchanttesting_la_SOURCES = \
   testing_api_cmd_config.c \
   testing_api_cmd_abort_order.c \
   testing_api_cmd_claim_order.c \
+  testing_api_cmd_depositcheck.c \
   testing_api_cmd_get_instance.c \
   testing_api_cmd_get_instances.c \
   testing_api_cmd_get_orders.c \
diff --git a/src/testing/test_kyc_api.c b/src/testing/test_kyc_api.c
index c8b683d8..1bb9f472 100644
--- a/src/testing/test_kyc_api.c
+++ b/src/testing/test_kyc_api.c
@@ -207,21 +207,16 @@ run (void *cls,
     /* KYC: hence nothing happened at the bank yet: */
     TALER_TESTING_cmd_check_bank_empty ("check_bank_empty-2"),
     /* KYC: we don't even know the legitimization UUID yet */
-    TALER_TESTING_cmd_merchant_kyc_get ("kyc-pending",
+    TALER_TESTING_cmd_merchant_kyc_get ("kyc-pending-early",
                                         merchant_url,
                                         NULL,
                                         NULL,
                                         EXCHANGE_URL,
                                         MHD_HTTP_NO_CONTENT,
                                         TALER_AML_NORMAL),
-    /* now we get the legi UUID */
-    TALER_TESTING_cmd_merchant_get_order ("get-order-kyc",
-                                          merchant_url,
-                                          "create-proposal-1",
-                                          TALER_MERCHANT_OSC_PAID,
-                                          false,
-                                          MHD_HTTP_OK,
-                                          NULL),
+    /* now we get the legi UUID by running taler-merchant-depositcheck */
+    TALER_TESTING_cmd_depositcheck ("deposit-check",
+                                    CONFIG_FILE),
     /* Now we should get a status of pending */
     TALER_TESTING_cmd_merchant_kyc_get ("kyc-pending",
                                         merchant_url,
@@ -397,11 +392,11 @@ run (void *cls,
                                                "default",
                                                MHD_HTTP_NO_CONTENT),
     TALER_TESTING_cmd_merchant_post_account (
-        "instance-create-default-account",
-        merchant_url,
-        merchant_payto,
-        NULL, NULL,
-        MHD_HTTP_OK),
+      "instance-create-default-account",
+      merchant_url,
+      merchant_payto,
+      NULL, NULL,
+      MHD_HTTP_OK),
     TALER_TESTING_cmd_batch ("pay",
                              pay),
     TALER_TESTING_cmd_batch ("aml",
diff --git a/src/testing/testing_api_cmd_depositcheck.c 
b/src/testing/testing_api_cmd_depositcheck.c
new file mode 100644
index 00000000..ad033d2e
--- /dev/null
+++ b/src/testing/testing_api_cmd_depositcheck.c
@@ -0,0 +1,162 @@
+/*
+  This file is part of TALER
+  Copyright (C) 2024 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or modify
+  it under the terms of the GNU 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 testing/testing_api_cmd_depositcheck.c
+ * @brief run the taler-merchant-depositcheck command
+ * @author Priscilla HUANG
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "taler/taler_json_lib.h"
+#include <gnunet/gnunet_curl_lib.h>
+#include "taler/taler_signatures.h"
+#include "taler/taler_testing_lib.h"
+
+
+/**
+ * State for a "depositcheck" CMD.
+ */
+struct DepositcheckState
+{
+
+  /**
+   * Process for the depositcheck.
+   */
+  struct GNUNET_OS_Process *depositcheck_proc;
+
+  /**
+   * Configuration file used by the depositcheck.
+   */
+  const char *config_filename;
+};
+
+
+/**
+ * Run the command; use the `taler-merchant-depositcheck' program.
+ *
+ * @param cls closure.
+ * @param cmd command currently being executed.
+ * @param is interpreter state.
+ */
+static void
+depositcheck_run (void *cls,
+                  const struct TALER_TESTING_Command *cmd,
+                  struct TALER_TESTING_Interpreter *is)
+{
+  struct DepositcheckState *ws = cls;
+
+  (void) cmd;
+  ws->depositcheck_proc
+    = GNUNET_OS_start_process (GNUNET_OS_INHERIT_STD_ALL,
+                               NULL, NULL, NULL,
+                               "taler-merchant-depositcheck",
+                               "taler-merchant-depositcheck",
+                               "-c", ws->config_filename,
+                               "-t", /* exit when done */
+                               "-L", "DEBUG",
+                               NULL);
+  if (NULL == ws->depositcheck_proc)
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+  TALER_TESTING_wait_for_sigchld (is);
+}
+
+
+/**
+ * Free the state of a "depositcheck" CMD, and possibly
+ * kills its process if it did not terminate regularly.
+ *
+ * @param cls closure.
+ * @param cmd the command being freed.
+ */
+static void
+depositcheck_cleanup (void *cls,
+                      const struct TALER_TESTING_Command *cmd)
+{
+  struct DepositcheckState *ws = cls;
+
+  (void) cmd;
+  if (NULL != ws->depositcheck_proc)
+  {
+    GNUNET_break (0 ==
+                  GNUNET_OS_process_kill (ws->depositcheck_proc,
+                                          SIGKILL));
+    GNUNET_OS_process_wait (ws->depositcheck_proc);
+    GNUNET_OS_process_destroy (ws->depositcheck_proc);
+    ws->depositcheck_proc = NULL;
+  }
+  GNUNET_free (ws);
+}
+
+
+/**
+ * Offer "depositcheck" CMD internal data to other commands.
+ *
+ * @param cls closure.
+ * @param[out] ret result.
+ * @param trait name of the trait.
+ * @param index index number of the object to offer.
+ * @return #GNUNET_OK on success.
+ */
+static enum GNUNET_GenericReturnValue
+depositcheck_traits (void *cls,
+                     const void **ret,
+                     const char *trait,
+                     unsigned int index)
+{
+  struct DepositcheckState *ws = cls;
+  struct TALER_TESTING_Trait traits[] = {
+    TALER_TESTING_make_trait_process (&ws->depositcheck_proc),
+    TALER_TESTING_trait_end ()
+  };
+
+  return TALER_TESTING_get_trait (traits,
+                                  ret,
+                                  trait,
+                                  index);
+}
+
+
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_depositcheck (const char *label,
+                                const char *config_filename)
+{
+  struct DepositcheckState *ws;
+
+  ws = GNUNET_new (struct DepositcheckState);
+  ws->config_filename = config_filename;
+
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = ws,
+      .label = label,
+      .run = &depositcheck_run,
+      .cleanup = &depositcheck_cleanup,
+      .traits = &depositcheck_traits
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_depositcheck.c */
diff --git a/src/testing/testing_api_cmd_merchant_get_order.c 
b/src/testing/testing_api_cmd_merchant_get_order.c
index 642fbed6..f30c43ad 100644
--- a/src/testing/testing_api_cmd_merchant_get_order.c
+++ b/src/testing/testing_api_cmd_merchant_get_order.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  Copyright (C) 2020 Taler Systems SA
+  Copyright (C) 2020-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as
@@ -536,7 +536,6 @@ merchant_get_order_run (void *cls,
     gos->merchant_url,
     order_id,
     NULL,
-    true,
     GNUNET_TIME_UNIT_ZERO,
     &merchant_get_order_cb,
     gos);
@@ -858,7 +857,6 @@ merchant_poll_order_start_run (void *cls,
     pos->merchant_url,
     pos->order_id,
     NULL,
-    false,
     pos->timeout,
     &merchant_poll_order_cb,
     pos);

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