gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: try to fix #8353


From: gnunet
Subject: [taler-merchant] branch master updated: try to fix #8353
Date: Sat, 10 Feb 2024 13:16:25 +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 a63ae8bb try to fix #8353
a63ae8bb is described below

commit a63ae8bba773b5e2371ee82c23ba1172d9465bfe
Author: Christian Grothoff <grothoff@gnunet.org>
AuthorDate: Sat Feb 10 13:15:09 2024 +0100

    try to fix #8353
---
 src/backend/taler-merchant-httpd_config.c              |  4 ++--
 src/backend/taler-merchant-httpd_get-orders-ID.c       | 17 +++++++++++++++++
 .../taler-merchant-httpd_private-get-orders-ID.c       | 18 +++++++++++++++++-
 src/backenddb/pg_lookup_order_by_fulfillment.c         | 12 +++++++++---
 src/backenddb/pg_lookup_order_by_fulfillment.h         |  2 ++
 src/backenddb/test_merchantdb.c                        |  2 ++
 src/include/taler_merchantdb_plugin.h                  |  2 ++
 src/lib/Makefile.am                                    |  2 +-
 src/lib/merchant_api_get_config.c                      |  4 ++--
 9 files changed, 54 insertions(+), 9 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_config.c 
b/src/backend/taler-merchant-httpd_config.c
index 784bdcf9..7a9d2324 100644
--- a/src/backend/taler-merchant-httpd_config.c
+++ b/src/backend/taler-merchant-httpd_config.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2019, 2020, 2021, 2023 Taler Systems SA
+  (C) 2019, 2020, 2021, 2023, 2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or modify it under the
   terms of the GNU Affero General Public License as published by the Free 
Software
@@ -42,7 +42,7 @@
  * #MERCHANT_PROTOCOL_CURRENT and #MERCHANT_PROTOCOL_AGE in
  * merchant_api_config.c!
  */
-#define MERCHANT_PROTOCOL_VERSION "8:2:0"
+#define MERCHANT_PROTOCOL_VERSION "9:0:5"
 
 
 /**
diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c 
b/src/backend/taler-merchant-httpd_get-orders-ID.c
index 02f2997f..13ff3fc9 100644
--- a/src/backend/taler-merchant-httpd_get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_get-orders-ID.c
@@ -161,6 +161,12 @@ struct GetOrderData
    */
   enum GNUNET_GenericReturnValue suspended;
 
+  /**
+   * Set to YES if refunded orders should be included when
+   * doing repurchase detection.
+   */
+  enum TALER_EXCHANGE_YesNoAll allow_refunded_for_repurchase;
+  
   /**
    * Set to true if the client passed 'h_contract'.
    */
@@ -795,6 +801,7 @@ god_cleanup (void *cls)
 }
 
 
+// FIXME: this function should probably be refactored...
 MHD_RESULT
 TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
                    struct MHD_Connection *connection,
@@ -827,6 +834,14 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
                                       "token",
                                       &god->claim_token,
                                       god->claim_token_provided);
+    if (! (TALER_arg_to_yna (connection,
+                             "allow_refunded_for_repurchase",
+                             TALER_EXCHANGE_YNA_NO,
+                             &god->allow_refunded_for_repurchase)) )
+      return TALER_MHD_reply_with_error (connection,
+                                         MHD_HTTP_BAD_REQUEST,
+                                         TALER_EC_GENERIC_PARAMETER_MALFORMED,
+                                         "allow_refunded_for_repurchase");
     god->session_id = MHD_lookup_connection_value (connection,
                                                    MHD_GET_ARGUMENT_KIND,
                                                    "session_id");
@@ -1227,6 +1242,8 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh,
                                               hc->instance->settings.id,
                                               god->fulfillment_url,
                                               god->session_id,
+                                              TALER_EXCHANGE_YNA_NO !=
+                                              
god->allow_refunded_for_repurchase,
                                               &already_paid_order_id);
     if (qs < 0)
     {
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 b5810174..1c850990 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2017-2023 Taler Systems SA
+  (C) 2017-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
@@ -334,6 +334,12 @@ struct GetOrderRequestContext
    */
   enum TALER_ErrorCode wire_ec;
 
+  /**
+   * Set to YES if refunded orders should be included when
+   * doing repurchase detection.
+   */
+  enum TALER_EXCHANGE_YesNoAll allow_refunded_for_repurchase;
+
   /**
    * HTTP status to return with @e wire_ec, 0 if @e wire_ec is #TALER_EC_NONE.
    */
@@ -813,6 +819,8 @@ phase_check_repurchase (struct GetOrderRequestContext *gorc)
                                             hc->instance->settings.id,
                                             gorc->fulfillment_url,
                                             gorc->session_id,
+                                            TALER_EXCHANGE_YNA_NO !=
+                                            
gorc->allow_refunded_for_repurchase,
                                             &already_paid_order_id);
   if (0 > qs)
   {
@@ -1457,6 +1465,14 @@ TMH_private_get_orders_ID (const struct 
TMH_RequestHandler *rh,
     gorc->session_id = MHD_lookup_connection_value (connection,
                                                     MHD_GET_ARGUMENT_KIND,
                                                     "session_id");
+    if (! (TALER_arg_to_yna (connection,
+                             "allow_refunded_for_repurchase",
+                             TALER_EXCHANGE_YNA_NO,
+                             &gorc->allow_refunded_for_repurchase)) )
+      return TALER_MHD_reply_with_error (connection,
+                                         MHD_HTTP_BAD_REQUEST,
+                                         TALER_EC_GENERIC_PARAMETER_MALFORMED,
+                                         "allow_refunded_for_repurchase");
     TALER_MHD_parse_request_timeout (connection,
                                      &gorc->sc.long_poll_timeout);
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
diff --git a/src/backenddb/pg_lookup_order_by_fulfillment.c 
b/src/backenddb/pg_lookup_order_by_fulfillment.c
index 0e9eba4a..291bd857 100644
--- a/src/backenddb/pg_lookup_order_by_fulfillment.c
+++ b/src/backenddb/pg_lookup_order_by_fulfillment.c
@@ -30,6 +30,7 @@ TMH_PG_lookup_order_by_fulfillment (void *cls,
                                     const char *instance_id,
                                     const char *fulfillment_url,
                                     const char *session_id,
+                                    bool allow_refunded_for_repurchase,
                                     char **order_id)
 {
   struct PostgresClosure *pg = cls;
@@ -37,6 +38,7 @@ TMH_PG_lookup_order_by_fulfillment (void *cls,
     GNUNET_PQ_query_param_string (instance_id),
     GNUNET_PQ_query_param_string (fulfillment_url),
     GNUNET_PQ_query_param_string (session_id),
+    GNUNET_PQ_query_param_bool (allow_refunded_for_repurchase),
     GNUNET_PQ_query_param_end
   };
   struct GNUNET_PQ_ResultSpec rs[] = {
@@ -49,14 +51,18 @@ TMH_PG_lookup_order_by_fulfillment (void *cls,
   PREPARE (pg,
            "lookup_order_by_fulfillment",
            "SELECT"
-           " order_id"
-           " FROM merchant_contract_terms"
+           " mct.order_id"
+           " FROM merchant_contract_terms mct"
+           " LEFT JOIN merchant_refunds mref"
+           "   USING (order_serial)"
            " WHERE fulfillment_url=$2"
            "   AND session_id=$3"
            "   AND merchant_serial="
            "        (SELECT merchant_serial"
            "           FROM merchant_instances"
-           "          WHERE merchant_id=$1)");
+           "          WHERE merchant_id=$1)"
+           "   AND ((CAST($4 AS BOOL)) OR"
+           "        mref.refund_serial IS NULL)");
 
   return GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
                                                    
"lookup_order_by_fulfillment",
diff --git a/src/backenddb/pg_lookup_order_by_fulfillment.h 
b/src/backenddb/pg_lookup_order_by_fulfillment.h
index 883ff4b9..44e96756 100644
--- a/src/backenddb/pg_lookup_order_by_fulfillment.h
+++ b/src/backenddb/pg_lookup_order_by_fulfillment.h
@@ -33,6 +33,7 @@
  * @param fulfillment_url URL that canonically identifies the resource
  *        being paid for
  * @param session_id session id
+ * @param allow_refunded_for_repurchase true to include refunded orders in 
repurchase detection
  * @param[out] order_id where to store the order ID that was used when
  *             paying for the resource URL
  * @return transaction status
@@ -42,6 +43,7 @@ TMH_PG_lookup_order_by_fulfillment (void *cls,
                                     const char *instance_id,
                                     const char *fulfillment_url,
                                     const char *session_id,
+                                    bool allow_refunded_for_repurchase,
                                     char **order_id);
 
 #endif
diff --git a/src/backenddb/test_merchantdb.c b/src/backenddb/test_merchantdb.c
index 2b9368f1..53902b3d 100644
--- a/src/backenddb/test_merchantdb.c
+++ b/src/backenddb/test_merchantdb.c
@@ -1811,6 +1811,7 @@ test_lookup_order_by_fulfillment (const struct 
InstanceData *instance,
                                            instance->instance.id,
                                            fulfillment_url,
                                            session_id,
+                                           false,
                                            &order_id))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -2165,6 +2166,7 @@ run_test_orders (struct TestOrders_Closure *cls)
                                              cls->instance.instance.id,
                                              "fulfillment_url",
                                              "test_orders_session",
+                                             false,
                                              &order_id))
     {
       GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
diff --git a/src/include/taler_merchantdb_plugin.h 
b/src/include/taler_merchantdb_plugin.h
index 1983f732..316b8678 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -2367,6 +2367,7 @@ struct TALER_MERCHANTDB_Plugin
    * @param fulfillment_url URL that canonically identifies the resource
    *        being paid for
    * @param session_id session id
+   * @param allow_refunded_for_repurchase true to include refunded orders in 
repurchase detection
    * @param[out] order_id location to store the order ID that was used when
    *             paying for the resource URL
    * @return transaction status
@@ -2376,6 +2377,7 @@ struct TALER_MERCHANTDB_Plugin
                                  const char *instance_id,
                                  const char *fulfillment_url,
                                  const char *session_id,
+                                 bool allow_refunded_for_repurchase,
                                  char **order_id);
 
   /**
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index d5a8376f..dc1ea4db 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -10,7 +10,7 @@ lib_LTLIBRARIES = \
   libtalermerchant.la
 
 libtalermerchant_la_LDFLAGS = \
-  -version-info 5:0:0 \
+  -version-info 5:1:0 \
   -no-undefined
 
 libtalermerchant_la_SOURCES = \
diff --git a/src/lib/merchant_api_get_config.c 
b/src/lib/merchant_api_get_config.c
index 153bca28..f2f6ab39 100644
--- a/src/lib/merchant_api_get_config.c
+++ b/src/lib/merchant_api_get_config.c
@@ -34,12 +34,12 @@
  * Which version of the Taler protocol is implemented
  * by this library?  Used to determine compatibility.
  */
-#define MERCHANT_PROTOCOL_CURRENT 8
+#define MERCHANT_PROTOCOL_CURRENT 9
 
 /**
  * How many configs are we backwards-compatible with?
  */
-#define MERCHANT_PROTOCOL_AGE 3
+#define MERCHANT_PROTOCOL_AGE 4
 
 
 /**

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