gnunet-svn
[Top][All Lists]
Advanced

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

[taler-merchant] 136/277: add GET /tips/ID handler


From: gnunet
Subject: [taler-merchant] 136/277: add GET /tips/ID handler
Date: Sun, 05 Jul 2020 20:50:49 +0200

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

grothoff pushed a commit to branch master
in repository merchant.

commit a006a459e5f7e5c47d8b0bf25f40f66954cc6464
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Fri May 22 11:19:49 2020 +0200

    add GET /tips/ID handler
---
 src/backend/Makefile.am                        |   2 +
 src/backend/taler-merchant-httpd.c             |   8 ++
 src/backend/taler-merchant-httpd_get-tips-ID.c | 117 +++++++++++++++++++++++++
 src/backend/taler-merchant-httpd_get-tips-ID.h |  40 +++++++++
 4 files changed, 167 insertions(+)

diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am
index 16b6ea6..1c42b7f 100644
--- a/src/backend/Makefile.am
+++ b/src/backend/Makefile.am
@@ -24,6 +24,8 @@ taler_merchant_httpd_SOURCES = \
   taler-merchant-httpd_exchanges.c taler-merchant-httpd_exchanges.h \
   taler-merchant-httpd_get-orders-ID.c \
     taler-merchant-httpd_get-orders-ID.h \
+  taler-merchant-httpd_get-tips-ID.c \
+    taler-merchant-httpd_get-tips-ID.h \
   taler-merchant-httpd_mhd.c taler-merchant-httpd_mhd.h \
   taler-merchant-httpd_private-delete-instances-ID.c \
     taler-merchant-httpd_private-delete-instances-ID.h \
diff --git a/src/backend/taler-merchant-httpd.c 
b/src/backend/taler-merchant-httpd.c
index b2577bd..3a43f8e 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -28,6 +28,7 @@
 #include "taler-merchant-httpd_config.h"
 #include "taler-merchant-httpd_exchanges.h"
 #include "taler-merchant-httpd_get-orders-ID.h"
+#include "taler-merchant-httpd_get-tips-ID.h"
 #include "taler-merchant-httpd_mhd.h"
 #include "taler-merchant-httpd_private-delete-instances-ID.h"
 #include "taler-merchant-httpd_private-delete-products-ID.h"
@@ -942,6 +943,13 @@ url_handler (void *cls,
       .have_id_segment = true,
       .handler = &TMH_get_orders_ID
     },
+    /* GET /tips/$ID: */
+    {
+      .url_prefix = "/tips/",
+      .method = MHD_HTTP_METHOD_GET,
+      .have_id_segment = true,
+      .handler = &TMH_get_tips_ID
+    },
     {
       NULL
     }
diff --git a/src/backend/taler-merchant-httpd_get-tips-ID.c 
b/src/backend/taler-merchant-httpd_get-tips-ID.c
new file mode 100644
index 0000000..fc77b2f
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_get-tips-ID.c
@@ -0,0 +1,117 @@
+/*
+  This file is part of TALER
+  (C) 2014-2020 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 backend/taler-merchant-httpd_get-tips-ID.c
+ * @brief implementation of GET /tips/$ID
+ * @author Marcello Stanisci
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include <jansson.h>
+#include <taler/taler_signatures.h>
+#include <taler/taler_json_lib.h>
+#include "taler-merchant-httpd_get-tips-ID.h"
+
+
+/**
+ * Handle a GET "/tips/$ID" request.
+ *
+ * @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_get_tips_ID (const struct TMH_RequestHandler *rh,
+                 struct MHD_Connection *connection,
+                 struct TMH_HandlerContext *hc)
+{
+  struct GNUNET_HashCode tip_id;
+  enum GNUNET_DB_QueryStatus qs;
+  struct TALER_Amount total_authorized;
+  struct TALER_Amount total_picked_up;
+  struct GNUNET_TIME_Absolute expiration;
+  char *exchange_url;
+  struct TALER_ReservePrivateKeyP reserve_priv;
+
+  if (GNUNET_OK !=
+      GNUNET_CRYPTO_hash_from_string (hc->infix,
+                                      &tip_id))
+  {
+    /* tip_id has wrong encoding */
+    GNUNET_break_op (0);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_BAD_REQUEST,
+                                       TALER_EC_PARAMETER_MALFORMED,
+                                       "tip_id malformed");
+  }
+
+  TMH_db->preflight (TMH_db->cls);
+  qs = TMH_db->lookup_tip (TMH_db->cls,
+                           hc->instance->settings.id,
+                           &tip_id,
+                           &total_authorized,
+                           &total_picked_up,
+                           &expiration,
+                           &exchange_url,
+                           &reserve_priv);
+  if (0 > qs)
+  {
+    /* single, read-only SQL statements should never cause
+       serialization problems */
+    GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
+    /* Always report on hard error as well to enable diagnostics */
+    GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
+                                       TALER_EC_GET_TIPS_DB_LOOKUP_ERROR,
+                                       "database error looking up contract");
+  }
+  if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Unknown tip id given: `%s'\n",
+                hc->infix);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_NOT_FOUND,
+                                       TALER_EC_GET_TIPS_ID_UNKNOWN,
+                                       "tip_id not found in database");
+  }
+
+  /* Build response */
+  {
+    MHD_RESULT ret;
+    struct TALER_Amount remaining;
+
+    GNUNET_break (0 >=
+                  TALER_amount_subtract (&remaining,
+                                         &total_authorized,
+                                         &total_picked_up));
+    ret = TALER_MHD_reply_json_pack (connection,
+                                     MHD_HTTP_OK,
+                                     "{s:s, s:o, s:o, s:o}",
+                                     "exchange_url", exchange_url,
+                                     "tip_amount",
+                                     TALER_JSON_from_amount (&remaining),
+                                     "expiration",
+                                     GNUNET_JSON_from_time_abs (expiration));
+    GNUNET_free (exchange_url);
+    return ret;
+  }
+}
+
+
+/* end of taler-merchant-httpd_get-tips-ID.c */
diff --git a/src/backend/taler-merchant-httpd_get-tips-ID.h 
b/src/backend/taler-merchant-httpd_get-tips-ID.h
new file mode 100644
index 0000000..6fa0253
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_get-tips-ID.h
@@ -0,0 +1,40 @@
+/*
+  This file is part of TALER
+  (C) 2020 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 backend/taler-merchant-httpd_get-tips-ID.h
+ * @brief implementation of GET /tips/$ID
+ * @author Marcello Stanisci
+ */
+#ifndef TALER_MERCHANT_HTTPD_GET_TIPS_ID_H
+#define TALER_MERCHANT_HTTPD_GET_TIPS_ID_H
+#include <microhttpd.h>
+#include "taler-merchant-httpd.h"
+
+
+/**
+ * Handle a GET "/tips/$ID" request.
+ *
+ * @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_get_tips_ID (const struct TMH_RequestHandler *rh,
+                 struct MHD_Connection *connection,
+                 struct TMH_HandlerContext *hc);
+
+#endif

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