From a5da6d3cec3b090c5aa21255eed37fc7a3ca48ec Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 10 May 2020 20:06:36 +0200 Subject: GET /transfers implementation --- src/backend/Makefile.am | 2 + src/backend/taler-merchant-httpd.c | 7 ++++ ...taler-merchant-httpd_private-get-instances-ID.c | 4 +- .../taler-merchant-httpd_private-get-transfers.c | 47 ++++++++++++++-------- .../taler-merchant-httpd_private-get-transfers.h | 25 +++++------- 5 files changed, 51 insertions(+), 34 deletions(-) (limited to 'src/backend') diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am index 2512143d..3127ab24 100644 --- a/src/backend/Makefile.am +++ b/src/backend/Makefile.am @@ -41,6 +41,8 @@ taler_merchant_httpd_SOURCES = \ taler-merchant-httpd_private-get-products-ID.h \ taler-merchant-httpd_private-get-orders.c \ taler-merchant-httpd_private-get-orders.h \ + taler-merchant-httpd_private-get-transfers.c \ + taler-merchant-httpd_private-get-transfers.h \ taler-merchant-httpd_private-patch-instances-ID.c \ taler-merchant-httpd_private-patch-instances-ID.h \ taler-merchant-httpd_private-patch-products-ID.c \ diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c index c5dbacd2..e3640112 100644 --- a/src/backend/taler-merchant-httpd.c +++ b/src/backend/taler-merchant-httpd.c @@ -38,6 +38,7 @@ #include "taler-merchant-httpd_private-get-products-ID.h" #include "taler-merchant-httpd_private-get-orders.h" // #include "taler-merchant-httpd_private-get-orders-ID.h" +#include "taler-merchant-httpd_private-get-transfers.h" #include "taler-merchant-httpd_private-patch-instances-ID.h" #include "taler-merchant-httpd_private-patch-products-ID.h" #include "taler-merchant-httpd_private-post-instances.h" @@ -838,6 +839,12 @@ url_handler (void *cls, .method = MHD_HTTP_METHOD_POST, .handler = &TMH_private_post_transfers }, + /* GET /transfers: */ + { + .url_prefix = "/transfers", + .method = MHD_HTTP_METHOD_GET, + .handler = &TMH_private_get_transfers + }, { NULL } diff --git a/src/backend/taler-merchant-httpd_private-get-instances-ID.c b/src/backend/taler-merchant-httpd_private-get-instances-ID.c index b6993791..bf248b15 100644 --- a/src/backend/taler-merchant-httpd_private-get-instances-ID.c +++ b/src/backend/taler-merchant-httpd_private-get-instances-ID.c @@ -51,7 +51,7 @@ TMH_private_get_instances_ID (const struct TMH_RequestHandler *rh, json_array_append_new ( ja, json_pack ( - "{s:O, s:o, s:O, s:o}", + "{s:O, s:o, s:O, s:b}", "payto_uri", json_object_get (wm->j_wire, "payto_uri"), @@ -61,7 +61,7 @@ TMH_private_get_instances_ID (const struct TMH_RequestHandler *rh, json_object_get (wm->j_wire, "salt"), "active", - (wm->active) ? json_true () : json_false ()))); + (wm->active) ? 1 : 0))); } return TALER_MHD_reply_json_pack ( diff --git a/src/backend/taler-merchant-httpd_private-get-transfers.c b/src/backend/taler-merchant-httpd_private-get-transfers.c index 23163129..0bf53f3d 100644 --- a/src/backend/taler-merchant-httpd_private-get-transfers.c +++ b/src/backend/taler-merchant-httpd_private-get-transfers.c @@ -21,13 +21,8 @@ */ #include "platform.h" #include -#include #include -#include "taler-merchant-httpd.h" -#include "taler-merchant-httpd_mhd.h" -#include "taler-merchant-httpd_auditors.h" -#include "taler-merchant-httpd_exchanges.h" -#include "taler-merchant-httpd_track-transfer.h" +#include "taler-merchant-httpd_private-get-transfers.h" /** @@ -54,11 +49,31 @@ transfer_cb (void *cls, const char *exchange_url, uint64_t transfer_serial_id, struct GNUNET_TIME_Absolute execution_time, - enum TALER_MERCHANTDB_YesNoAll verified) + bool verified, + bool confirmed) { json_t *ja = cls; - - + json_t *r; + + r = json_pack ("{s:o, s:o, s:s, s:s, s:I, s:b, s:b}", + "credit_amount", TALER_JSON_from_amount (credit_amount), + "wtid", GNUNET_JSON_from_data_auto (wtid), + "payto_uri", payto_uri, + "exchange_url", exchange_url, + "transfer_serial_id", (json_int_t) transfer_serial_id, + "verified", verified ? 1 : 0, + "confirmed", confirmed ? 1 : 0); + GNUNET_assert (NULL != r); + if (GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us != + execution_time.abs_value_us) + GNUNET_assert (0 == + json_object_set_new ( + r, + "execution_time", + GNUNET_JSON_from_time_abs (execution_time))); + GNUNET_assert (0 == + json_array_append_new (ja, + r)); } @@ -150,7 +165,7 @@ TMH_private_get_transfers (const struct TMH_RequestHandler *rh, unsigned long long o; if (1 != - sscanf (limit_s, + sscanf (offset_s, "%llu%1s", &o, dummy)) @@ -200,7 +215,7 @@ TMH_private_get_transfers (const struct TMH_RequestHandler *rh, "verified"); } - db->preflight (db->cls); + TMH_db->preflight (TMH_db->cls); { json_t *ja; enum GNUNET_DB_QueryStatus qs; @@ -225,13 +240,13 @@ TMH_private_get_transfers (const struct TMH_RequestHandler *rh, GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs); return TALER_MHD_reply_with_error (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GET_TRANSFERS_DB_FETCH_DEPOSIT_ERROR, + TALER_EC_GET_TRANSFERS_DB_FETCH_ERROR, "Fail to query database about transfers"); } - return MHD_MHD_reply_json_pack (connection, - MHD_HTTP_OK, - "{s:o}", - "transfers", ja); + return TALER_MHD_reply_json_pack (connection, + MHD_HTTP_OK, + "{s:o}", + "transfers", ja); } } diff --git a/src/backend/taler-merchant-httpd_private-get-transfers.h b/src/backend/taler-merchant-httpd_private-get-transfers.h index 0463295e..556e8558 100644 --- a/src/backend/taler-merchant-httpd_private-get-transfers.h +++ b/src/backend/taler-merchant-httpd_private-get-transfers.h @@ -14,36 +14,29 @@ TALER; see the file COPYING. If not, see */ /** - * @file backend/taler-merchant-httpd_track-transfer.h - * @brief headers for /track/transfer handler + * @file backend/taler-merchant-httpd_private-get-transfers.h + * @brief headers for GET /transfers handler * @author Christian Grothoff * @author Marcello Stanisci */ -#ifndef TALER_MERCHANT_HTTPD_TRACK_TRANSFER_H -#define TALER_MERCHANT_HTTPD_TRACK_TRANSFER_H +#ifndef TALER_MERCHANT_HTTPD_PRIVATE_GET_TRANSFERS_H +#define TALER_MERCHANT_HTTPD_PRIVATE_GET_TRANSFERS_H #include #include "taler-merchant-httpd.h" + /** - * Manages a /track/transfer call, thus it calls the /wire/transfer - * offered by the exchange in order to return the set of transfers - * (of coins) associated with a given wire transfer + * Manages a GET /private/transfers call. * * @param rh context of the handler * @param connection the MHD connection to handle - * @param[in,out] connection_cls the connection's closure (can be updated) - * @param upload_data upload data - * @param[in,out] upload_data_size number of bytes (left) in @a upload_data - * @param mi merchant backend instance, never NULL + * @param[in,out] hc context with further information about the request * @return MHD result code */ MHD_RESULT -MH_handler_track_transfer (struct TMH_RequestHandler *rh, +TMH_private_get_transfers (const struct TMH_RequestHandler *rh, struct MHD_Connection *connection, - void **connection_cls, - const char *upload_data, - size_t *upload_data_size, - struct MerchantInstance *mi); + struct TMH_HandlerContext *hc); #endif -- cgit v1.2.3