gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] branch master updated: update


From: gnunet
Subject: [taler-merchant] branch master updated: update
Date: Thu, 12 Jan 2023 11:39:46 +0100

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

priscilla-huang pushed a commit to branch master
in repository merchant.

The following commit(s) were added to refs/heads/master by this push:
     new f129942b update
f129942b is described below

commit f129942b7c58058c495f99491fc34f85c5ba05a7
Author: priscilla <priscilla.huang@efrei.net>
AuthorDate: Thu Jan 12 05:39:32 2023 -0500

    update
---
 ...chant-httpd_private-patch-pending-webhooks-ID.c | 174 +++++++++++++++++++++
 src/backenddb/merchantdb_helper.c                  |   4 +-
 src/backenddb/plugin_merchantdb_postgres.c         |   6 +-
 3 files changed, 179 insertions(+), 5 deletions(-)

diff --git 
a/src/backend/taler-merchant-httpd_private-patch-pending-webhooks-ID.c 
b/src/backend/taler-merchant-httpd_private-patch-pending-webhooks-ID.c
new file mode 100644
index 00000000..1a09c259
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_private-patch-pending-webhooks-ID.c
@@ -0,0 +1,174 @@
+/*
+  This file is part of TALER
+  (C) 2023 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 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_private-patch-pending-webhooks-ID.c
+ * @brief implementing PATCH /pending webhooks/$ID request handling
+ * @author Priscilla HUANG
+ */
+#include "platform.h"
+#include "taler-merchant-httpd_private-patch-pending-webhooks-ID.h"
+#include "taler-merchant-httpd_helper.h"
+#include <taler/taler_json_lib.h>
+
+/**
+ * How often do we retry the simple INSERT database transaction?
+ */
+#define MAX_RETRIES 3
+
+
+/**
+ * Determine the cause of the PATCH failure in more detail and report.
+ *
+ * @param connection connection to report on
+ * @param instance_id instance we are processing
+ * @param webhook_serial ID of the pending webhook to patch
+ * @param pwb webhook details we failed to set
+ */
+static MHD_RESULT
+determine_cause (struct MHD_Connection *connection,
+                 const char *instance_id,
+                 uint64_t *webhook_serial,
+                 const struct TALER_MERCHANTDB_PendingWebhookDetails *pwb)
+{
+  struct TALER_MERCHANTDB_PendingWebhookDetails wpx;
+  enum GNUNET_DB_QueryStatus qs;
+
+  qs = TMH_db->lookup_pending_webhook (TMH_db->cls,
+                                       instance_id,
+                                       webhook_serial,
+                                       &wpx);
+  switch (qs)
+  {
+  case GNUNET_DB_STATUS_HARD_ERROR:
+    GNUNET_break (0);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                       TALER_EC_GENERIC_DB_FETCH_FAILED,
+                                       NULL);
+  case GNUNET_DB_STATUS_SOFT_ERROR:
+    GNUNET_break (0);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                       
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
+                                       "unexpected serialization problem");
+  case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_NOT_FOUND,
+                                       
TALER_EC_MERCHANT_GENERIC_PENDING_WEBHOOK_UNKNOWN,
+                                       webhook_id);
+  case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+    break; /* do below */
+  }
+
+  {
+    enum TALER_ErrorCode ec;
+
+    ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
+    TALER_MERCHANTDB_pending_webhook_details_free (&wpx);
+    GNUNET_break (TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE != ec);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_CONFLICT,
+                                       ec,
+                                       NULL);
+  }
+}
+
+/**
+ * PATCH configuration of an existing instance, given its configuration.
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] hc context with further information about the request
+ * @return MHD result code
+ */
+MHD_RESULT
+TMH_private_patch_pending_webhooks_ID (const struct TMH_RequestHandler *rh,
+                                       struct MHD_Connection *connection,
+                                       struct TMH_HandlerContext *hc)
+{
+  struct TMH_MerchantInstance *mi = hc->instance;
+  uint64_t *webhook_serial = hc->infix;
+  struct TALER_MERCHANTDB_PendingWebhookDetails pwb = {0};
+  enum GNUNET_DB_QueryStatus qs;
+  struct GNUNET_JSON_Specification spec[] = {
+    GNUNET_JSON_spec_absolute ("next_attempt",
+                               (&pwb.next_attempt),
+    GNUNET_JSON_spec_end ()
+  };
+
+  GNUNET_assert (NULL != mi);
+  GNUNET_assert (NULL != webhook_serial);
+  {
+    enum GNUNET_GenericReturnValue res;
+
+    res = TALER_MHD_parse_json_data (connection,
+                                     hc->request_body,
+                                     spec);
+    if (GNUNET_OK != res)
+      return (GNUNET_NO == res)
+             ? MHD_YES
+             : MHD_NO;
+  }
+
+
+  qs = TMH_db->update_pending_webhook (TMH_db->cls,
+                                       mi->settings.id,
+                                       webhook_serial,
+                                       &pwb);
+  {
+    MHD_RESULT ret = MHD_NO;
+
+    switch (qs)
+    {
+    case GNUNET_DB_STATUS_HARD_ERROR:
+      GNUNET_break (0);
+      ret = TALER_MHD_reply_with_error (connection,
+                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                        TALER_EC_GENERIC_DB_STORE_FAILED,
+                                        NULL);
+      break;
+    case GNUNET_DB_STATUS_SOFT_ERROR:
+      GNUNET_break (0);
+      ret = TALER_MHD_reply_with_error (connection,
+                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                        
TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE,
+                                        "unexpected serialization problem");
+      break;
+    case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
+      ret = determine_cause (connection,
+                             mi->settings.id,
+                             webhook_serial,
+                             &pwb);
+      break;
+    case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
+      ret = TALER_MHD_reply_static (connection,
+                                    MHD_HTTP_NO_CONTENT,
+                                    NULL,
+                                    NULL,
+                                    0);
+      break;
+    }
+    GNUNET_JSON_parse_free (spec);
+    return ret;
+  }
+}
+
+
+    /* end of taler-merchant-httpd_private-patch-pending-webhooks-ID.c */
diff --git a/src/backenddb/merchantdb_helper.c 
b/src/backenddb/merchantdb_helper.c
index bef92e8f..0a49f5d6 100644
--- a/src/backenddb/merchantdb_helper.c
+++ b/src/backenddb/merchantdb_helper.c
@@ -65,8 +65,8 @@ TALER_MERCHANTDB_pending_webhook_details_free (
 {
   GNUNET_free (pwb->url);
   GNUNET_free (pwb->http_method);
-  GNUNET_free (pwb->header_template);
-  GNUNET_free (pwb->body_template);
+  GNUNET_free (pwb->header);
+  GNUNET_free (pwb->body);
 }
 
 
diff --git a/src/backenddb/plugin_merchantdb_postgres.c 
b/src/backenddb/plugin_merchantdb_postgres.c
index 22dd188b..312f22ee 100644
--- a/src/backenddb/plugin_merchantdb_postgres.c
+++ b/src/backenddb/plugin_merchantdb_postgres.c
@@ -7531,7 +7531,7 @@ postgres_lookup_pending_webhook (void *cls,
   struct PostgresClosure *pg = cls;
   struct GNUNET_PQ_QueryParam params[] = {
     GNUNET_PQ_query_param_string (instance_id),
-    GNUNET_PQ_query_param_string (webhook_serial),
+    GNUNET_PQ_query_param_uint64 (webhook_serial),
     GNUNET_PQ_query_param_end
   };
 
@@ -7551,7 +7551,7 @@ postgres_lookup_pending_webhook (void *cls,
   {
     struct GNUNET_PQ_ResultSpec rs[] = {
       GNUNET_PQ_result_spec_absolute_time ("next_attempt",
-                                           &next_attempt),
+                                           &pwb->next_attempt),
       GNUNET_PQ_result_spec_uint32 ("retries",
                                     &pwb->retries),
       GNUNET_PQ_result_spec_string ("url",
@@ -10659,7 +10659,7 @@ libtaler_plugin_merchantdb_postgres_init (void *cls)
   plugin->lookup_webhook_by_event = &postgres_lookup_webhook_by_event;
   plugin->lookup_all_webhooks = &postgres_lookup_all_webhooks;
   plugin->lookup_future_webhook = &postgres_lookup_future_webhook;
-  plugin->lookup_pending_webhook = &postgres_lookup_pending_webhook;
+  plugin->lookup_pending_webhooks = &postgres_lookup_pending_webhooks;
   plugin->delete_pending_webhook = &postgres_delete_pending_webhook;
   plugin->insert_pending_webhook = &postgres_insert_pending_webhook;
   plugin->update_pending_webhook = &postgres_update_pending_webhook;

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