From ad99fc41cd3059d2b954a0096304c2118ff57e11 Mon Sep 17 00:00:00 2001 From: priscilla Date: Tue, 29 Nov 2022 08:20:03 -0500 Subject: update --- src/backend/Makefile.am | 10 ++++ src/backend/taler-merchant-httpd.c | 54 ++++++++++++++++++++++ src/backend/taler-merchant-httpd.h | 4 +- .../taler-merchant-httpd_private-get-webhooks.c | 2 +- ...aler-merchant-httpd_private-patch-webhooks-ID.c | 2 +- .../taler-merchant-httpd_private-post-webhooks.c | 10 ---- 6 files changed, 68 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am index a24e80ad..de283293 100644 --- a/src/backend/Makefile.am +++ b/src/backend/Makefile.am @@ -36,6 +36,8 @@ taler_merchant_httpd_SOURCES = \ taler-merchant-httpd_mhd.c taler-merchant-httpd_mhd.h \ taler-merchant-httpd_private-delete-templates-ID.c \ taler-merchant-httpd_private-delete-templates-ID.h \ + taler-merchant-httpd_private-delete-webhooks-ID.c \ + taler-merchant-httpd_private-delete-webhooks-ID.h \ taler-merchant-httpd_private-delete-instances-ID.c \ taler-merchant-httpd_private-delete-instances-ID.h \ taler-merchant-httpd_private-delete-products-ID.c \ @@ -70,8 +72,14 @@ taler_merchant_httpd_SOURCES = \ taler-merchant-httpd_private-get-templates.h \ taler-merchant-httpd_private-get-templates-ID.c \ taler-merchant-httpd_private-get-templates-ID.h \ + taler-merchant-httpd_private-get-webhooks.c \ + taler-merchant-httpd_private-get-webhooks.h \ + taler-merchant-httpd_private-get-webhooks-ID.c \ + taler-merchant-httpd_private-get-webhooks-ID.h \ taler-merchant-httpd_private-patch-templates-ID.c \ taler-merchant-httpd_private-patch-templates-ID.h \ + taler-merchant-httpd_private-patch-webhooks-ID.c \ + taler-merchant-httpd_private-patch-webhooks-ID.h \ taler-merchant-httpd_private-patch-instances-ID.c \ taler-merchant-httpd_private-patch-instances-ID.h \ taler-merchant-httpd_private-patch-orders-ID-forget.c \ @@ -80,6 +88,8 @@ taler_merchant_httpd_SOURCES = \ taler-merchant-httpd_private-patch-products-ID.h \ taler-merchant-httpd_private-post-templates.c \ taler-merchant-httpd_private-post-templates.h \ + taler-merchant-httpd_private-post-webhooks.c \ + taler-merchant-httpd_private-post-webhooks.h \ taler-merchant-httpd_private-post-instances.c \ taler-merchant-httpd_private-post-instances.h \ taler-merchant-httpd_private-post-instances-ID-auth.c \ diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c index 95484c37..d16a55ee 100644 --- a/src/backend/taler-merchant-httpd.c +++ b/src/backend/taler-merchant-httpd.c @@ -34,12 +34,15 @@ #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-webhooks-ID.h" #include "taler-merchant-httpd_private-delete-templates-ID.h" #include "taler-merchant-httpd_private-delete-instances-ID.h" #include "taler-merchant-httpd_private-delete-products-ID.h" #include "taler-merchant-httpd_private-delete-orders-ID.h" #include "taler-merchant-httpd_private-delete-reserves-ID.h" #include "taler-merchant-httpd_private-delete-transfers-ID.h" +#include "taler-merchant-httpd_private-get-webhooks.h" +#include "taler-merchant-httpd_private-get-webhooks-ID.h" #include "taler-merchant-httpd_private-get-templates.h" #include "taler-merchant-httpd_private-get-templates-ID.h" #include "taler-merchant-httpd_private-get-instances.h" @@ -54,10 +57,12 @@ #include "taler-merchant-httpd_private-get-tips-ID.h" #include "taler-merchant-httpd_private-get-tips.h" #include "taler-merchant-httpd_private-get-transfers.h" +#include "taler-merchant-httpd_private-patch-webhooks-ID.h" #include "taler-merchant-httpd_private-patch-templates-ID.h" #include "taler-merchant-httpd_private-patch-instances-ID.h" #include "taler-merchant-httpd_private-patch-orders-ID-forget.h" #include "taler-merchant-httpd_private-patch-products-ID.h" +#include "taler-merchant-httpd_private-post-webhooks.h" #include "taler-merchant-httpd_private-post-templates.h" #include "taler-merchant-httpd_private-post-instances.h" #include "taler-merchant-httpd_private-post-instances-ID-auth.h" @@ -1103,6 +1108,55 @@ url_handler (void *cls, in the code... */ .max_upload = 1024 * 1024 * 8 }, + { + .url_prefix = NULL + }, + /* GET /webhooks: */ + { + .url_prefix = "/webhooks/", + .method = MHD_HTTP_METHOD_GET, + .handler = &TMH_private_get_webhooks + }, + /* POST /webhooks: */ + { + .url_prefix = "/webhooks/", + .method = MHD_HTTP_METHOD_POST, + .handler = &TMH_private_post_webhooks, + /* allow webhook data of up to 8 MB, that should be plenty; + note that exceeding #GNUNET_MAX_MALLOC_CHECKED (40 MB) + would require further changes to the allocation logic + in the code... */ + .max_upload = 1024 * 1024 * 8 + }, + /* GET /webhooks/$ID/: */ + { + .url_prefix = "/webhooks/", + .method = MHD_HTTP_METHOD_GET, + .have_id_segment = true, + .allow_deleted_instance = true, + .handler = &TMH_private_get_webhooks_ID + }, + /* DELETE /webhooks/$ID/: */ + { + .url_prefix = "/webhooks/", + .method = MHD_HTTP_METHOD_DELETE, + .have_id_segment = true, + .allow_deleted_instance = true, + .handler = &TMH_private_delete_webhooks_ID + }, + /* PATCH /webhooks/$ID/: */ + { + .url_prefix = "/webhooks/", + .method = MHD_HTTP_METHOD_PATCH, + .have_id_segment = true, + .allow_deleted_instance = true, + .handler = &TMH_private_patch_webhooks_ID, + /* allow webhook data of up to 8 MB, that should be plenty; + note that exceeding #GNUNET_MAX_MALLOC_CHECKED (40 MB) + would require further changes to the allocation logic + in the code... */ + .max_upload = 1024 * 1024 * 8 + }, { .url_prefix = NULL } diff --git a/src/backend/taler-merchant-httpd.h b/src/backend/taler-merchant-httpd.h index 5dbb0c94..e8911b32 100644 --- a/src/backend/taler-merchant-httpd.h +++ b/src/backend/taler-merchant-httpd.h @@ -381,7 +381,7 @@ struct TMH_RequestHandler /** * URL prefix the handler is for, includes the '/', - * so "/orders", "/templates" or "/products". Does *not* include + * so "/orders", "/templates", "/webhooks" or "/products". Does *not* include * "/private", that is controlled by the array in which * the handler is defined. Must not contain any * '/' except for the leading '/'. @@ -390,7 +390,7 @@ struct TMH_RequestHandler /** * Does this request include an identifier segment - * (product_id, reserve_pub, order_id, tip_id, template_id) in the + * (product_id, reserve_pub, order_id, tip_id, template_id, webhook_id) in the * second segment? */ bool have_id_segment; diff --git a/src/backend/taler-merchant-httpd_private-get-webhooks.c b/src/backend/taler-merchant-httpd_private-get-webhooks.c index 735748e3..cda4eda9 100644 --- a/src/backend/taler-merchant-httpd_private-get-webhooks.c +++ b/src/backend/taler-merchant-httpd_private-get-webhooks.c @@ -29,7 +29,7 @@ * @param webhook_id ID of the webhook */ static void -add_template (void *cls, +add_webhook (void *cls, const char *webhook_id, const char *event_type) { diff --git a/src/backend/taler-merchant-httpd_private-patch-webhooks-ID.c b/src/backend/taler-merchant-httpd_private-patch-webhooks-ID.c index af93e96a..3144687b 100644 --- a/src/backend/taler-merchant-httpd_private-patch-webhooks-ID.c +++ b/src/backend/taler-merchant-httpd_private-patch-webhooks-ID.c @@ -107,7 +107,7 @@ TMH_private_patch_webhooks_ID (const struct TMH_RequestHandler *rh, { struct TMH_MerchantInstance *mi = hc->instance; const char *webhook_id = hc->infix; - struct TALER_MERCHANTDB_WebhookDetails tp = {0}; + struct TALER_MERCHANTDB_WebhookDetails wb = {0}; enum GNUNET_DB_QueryStatus qs; struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_string ("event_type", diff --git a/src/backend/taler-merchant-httpd_private-post-webhooks.c b/src/backend/taler-merchant-httpd_private-post-webhooks.c index ab076924..57fa3a65 100644 --- a/src/backend/taler-merchant-httpd_private-post-webhooks.c +++ b/src/backend/taler-merchant-httpd_private-post-webhooks.c @@ -100,16 +100,6 @@ TMH_private_post_webhooks (const struct TMH_RequestHandler *rh, } - if (! TMH_url_valid (wb.url)) - { - GNUNET_break_op (0); - GNUNET_JSON_parse_free (spec); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_BAD_REQUEST, - TALER_EC_GENERIC_PARAMETER_MALFORMED, - "url"); - } - /* finally, interact with DB until no serialization error */ for (unsigned int i = 0; i