From 4a6f917151c9a33d22d57467d3bc110add0fe11f Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 16 Apr 2021 23:07:14 +0200 Subject: enable use of per-instance APIs also in C API --- src/include/taler_merchant_service.h | 57 ++++++++++++++++++++++++++++++---- src/lib/merchant_api_delete_instance.c | 25 +++++++++------ src/lib/merchant_api_patch_instance.c | 9 ++++++ 3 files changed, 75 insertions(+), 16 deletions(-) diff --git a/src/include/taler_merchant_service.h b/src/include/taler_merchant_service.h index 67f544e9..b897bd2c 100644 --- a/src/include/taler_merchant_service.h +++ b/src/include/taler_merchant_service.h @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014-2020 Taler Systems SA + Copyright (C) 2014-2021 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 @@ -561,8 +561,10 @@ typedef void * Modify an existing instance in the backend. * * @param ctx the context - * @param backend_url HTTP base URL for the backend - * @param instance_id identity of the instance to get information about + * @param backend_url HTTP base URL for the backend (top-level "default" instance + * or base URL of an instance if @a instance_id is NULL) + * @param instance_id identity of the instance to modify information about; NULL + * if the instance is identified as part of the @a backend_url * @param accounts_length length of the @a accounts array * @param payto_uris URIs of the bank accounts of the merchant instance * @param name name of the merchant instance @@ -573,7 +575,6 @@ typedef void * @param default_max_deposit_fee default maximum deposit fee merchant is willing to pay * @param default_wire_transfer_delay default wire transfer delay merchant will ask for * @param default_pay_delay default validity period for offers merchant makes - * @param auth_token authorization token needed to access the instance, can be NULL * @param cb function to call with the * backend's instances information * @param cb_cls closure for @a config_cb @@ -609,6 +610,48 @@ TALER_MERCHANT_instance_patch_cancel ( struct TALER_MERCHANT_InstancePatchHandle *iph); +/** + * Handle for an operation to modify authentication settings. + */ +struct TALER_MERCHANT_InstanceAuthPatchHande; + + +/** + * Modify authentication for an existing instance in the backend. + * + * @param ctx the context + * @param backend_url HTTP base URL for the backend (top-level "default" instance + * or base URL of an instance if @a instance_id is NULL) + * @param instance_id identity of the instance to patch the authentication for; NULL + * if the instance is identified as part of the @a backend_url + * @param auth_token authorization token needed to access the instance, can be NULL + * to swith to no (or external) authentication + * @param cb function to call with the backend's response + * @param cb_cls closure for @a config_cb + * @return the instances handle; NULL upon error + */ +struct TALER_MERCHANT_InstanceAuthPatchHandle * +TALER_MERCHANT_instance_auth_patch ( + struct GNUNET_CURL_Context *ctx, + const char *backend_url, + const char *instance_id, + const char *auth_token, + TALER_MERCHANT_InstancePatchCallback cb, + void *cb_cls); + + +/** + * Cancel /private/auth request. Must not be called by clients after + * the callback was invoked. Afterwards, the authentication may or + * may not have been updated. + * + * @param iaph request to cancel. + */ +void +TALER_MERCHANT_instance_auth_patch_cancel ( + struct TALER_MERCHANT_InstanceAuthPatchHandle *iaph); + + /** * Handle for a GET /instances/$ID operation. */ @@ -769,8 +812,10 @@ typedef void * (i.e. for taxation). * * @param ctx the context - * @param backend_url HTTP base URL for the backend - * @param instance_id which instance should be deleted + * @param backend_url HTTP base URL for the backend (top-level "default" instance + * or base URL of an instance if @a instance_id is NULL) + * @param instance_id identity of the instance to modify information about; NULL + * if the instance is identified as part of the @a backend_url * @param instances_cb function to call with the * backend's return * @param instances_cb_cls closure for @a config_cb diff --git a/src/lib/merchant_api_delete_instance.c b/src/lib/merchant_api_delete_instance.c index 4568f7e1..4ef40952 100644 --- a/src/lib/merchant_api_delete_instance.c +++ b/src/lib/merchant_api_delete_instance.c @@ -140,24 +140,29 @@ instance_delete (struct GNUNET_CURL_Context *ctx, idh->ctx = ctx; idh->cb = cb; idh->cb_cls = cb_cls; + if (NULL != instance_id) { char *path; GNUNET_asprintf (&path, "instances/%s/private", instance_id); - if (purge) - idh->url = TALER_url_join (backend_url, - path, - "purge", - "yes", - NULL); - else - idh->url = TALER_url_join (backend_url, - path, - NULL); + idh->url = TALER_url_join (backend_url, + path, + "purge", + (purge) ? "yes" : NULL, + NULL); GNUNET_free (path); } + else + { + /* backend_url is already identifying the instance */ + idh->url = TALER_url_join (backend_url, + "/private", + "purge", + (purge) ? "yes" : NULL, + NULL); + } if (NULL == idh->url) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, diff --git a/src/lib/merchant_api_patch_instance.c b/src/lib/merchant_api_patch_instance.c index 2fc8eaff..f51bb953 100644 --- a/src/lib/merchant_api_patch_instance.c +++ b/src/lib/merchant_api_patch_instance.c @@ -223,6 +223,7 @@ TALER_MERCHANT_instance_patch ( iph->ctx = ctx; iph->cb = cb; iph->cb_cls = cb_cls; + if (NULL != instance_id) { char *path; @@ -234,6 +235,13 @@ TALER_MERCHANT_instance_patch ( NULL); GNUNET_free (path); } + else + { + /* backend_url is already identifying the instance */ + iph->url = TALER_url_join (backend_url, + "/private", + NULL); + } if (NULL == iph->url) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, @@ -253,6 +261,7 @@ TALER_MERCHANT_instance_patch ( { GNUNET_break (0); json_decref (req_obj); + GNUNET_free (iph->url); GNUNET_free (iph); return NULL; } -- cgit v1.2.3