[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.
- [taler-merchant] 120/277: implement insert_reserve, (continued)
- [taler-merchant] 120/277: implement insert_reserve, gnunet, 2020/07/05
- [taler-merchant] 125/277: more work on GET /reserves logic, gnunet, 2020/07/05
- [taler-merchant] 99/277: more work on post /transfers and the like, gnunet, 2020/07/05
- [taler-merchant] 93/277: updates, gnunet, 2020/07/05
- [taler-merchant] 100/277: more work on POST /transfer, gnunet, 2020/07/05
- [taler-merchant] 121/277: Merge branch 'master' into protocolV1, gnunet, 2020/07/05
- [taler-merchant] 126/277: more instance and product related tests, gnunet, 2020/07/05
- [taler-merchant] 124/277: expanding DB API, gnunet, 2020/07/05
- [taler-merchant] 128/277: more work on tipping implementation, gnunet, 2020/07/05
- [taler-merchant] 132/277: Merge branch 'protocolV1' of git+ssh://git.taler.net/merchant into protocolV1, gnunet, 2020/07/05
- [taler-merchant] 136/277: add GET /tips/ID handler,
gnunet <=
- [taler-merchant] 138/277: wrote some db tests for orders, gnunet, 2020/07/05
- [taler-merchant] 123/277: added tests for instance creation and lookup, gnunet, 2020/07/05
- [taler-merchant] 127/277: implement reserve deletion, gnunet, 2020/07/05
- [taler-merchant] 135/277: fix ftbfs, gnunet, 2020/07/05
- [taler-merchant] 130/277: added more instance tests and fixed mem leaks/code style in tests, gnunet, 2020/07/05
- [taler-merchant] 133/277: fix ftbfs, gnunet, 2020/07/05
- [taler-merchant] 139/277: wrote db tests for accounts, gnunet, 2020/07/05
- [taler-merchant] 140/277: DB prep work, gnunet, 2020/07/05
- [taler-merchant] 142/277: wip on DB plugin for tip pickup, gnunet, 2020/07/05
- [taler-merchant] 144/277: refactored instance test code, gnunet, 2020/07/05