merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 7aa4e8620c40c468526bf354f280a3f994e06e2d
parent f615db25595b1b39a1d129f698338a67894fe5b0
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sun,  5 Jul 2026 23:51:27 +0200

remove long-dead code

Diffstat:
Dsrc/merchant-tools/taler-merchant-setup-reserve.c | 433-------------------------------------------------------------------------------
1 file changed, 0 insertions(+), 433 deletions(-)

diff --git a/src/merchant-tools/taler-merchant-setup-reserve.c b/src/merchant-tools/taler-merchant-setup-reserve.c @@ -1,433 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2020 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU 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 src/merchant-tools/taler-merchant-setup-reserve.c - * @brief Create reserve for tipping - * @author Christian Grothoff - */ -#include "platform.h" -#include <taler/taler_util.h> -#include <microhttpd.h> -#include <gnunet/gnunet_util_lib.h> -#include "taler/taler_merchant_service.h" - -/** - * How often do we try before giving up? - */ -#define MAX_TRIES 30 - -/** - * Return value from main(). - */ -static int global_ret; - -/** - * Initial amount the reserve will be filled with. - */ -static struct TALER_Amount initial_amount; - -/** - * Base URL of the merchant (with instance) to create the reserve for. - */ -static char *merchant_base_url; - -/** - * Base URL of the exchange to create the reserve at. - */ -static char *exchange_base_url; - -/** - * Wire method to use. - */ -static char *wire_method; - -/** - * Operation handle. - */ -static struct TALER_MERCHANT_PostReservesHandle *prh; - -/** - * Our context for making HTTP requests. - */ -static struct GNUNET_CURL_Context *ctx; - -/** - * Reschedule context. - */ -static struct GNUNET_CURL_RescheduleContext *rc; - -/** - * Username and password to use for client authentication - * (optional). - */ -static char *userpass; - -/** - * Type of the client's TLS certificate (optional). - */ -static char *certtype; - -/** - * File with the client's TLS certificate (optional). - */ -static char *certfile; - -/** - * File with the client's TLS private key (optional). - */ -static char *keyfile; - -/** - * This value goes in the Authorization:-header. - */ -static char *apikey; - -/** - * Passphrase to decrypt client's TLS private key file (optional). - */ -static char *keypass; - -/** - * How often have we tried? - */ -static unsigned int tries; - -/** - * Task to do the main work. - */ -static struct GNUNET_SCHEDULER_Task *task; - - -/** - * Shutdown task (invoked when the process is being terminated) - * - * @param cls NULL - */ -static void -do_shutdown (void *cls) -{ - if (NULL != task) - { - GNUNET_SCHEDULER_cancel (task); - task = NULL; - } - if (NULL != ctx) - { - GNUNET_CURL_fini (ctx); - ctx = NULL; - } - if (NULL != rc) - { - GNUNET_CURL_gnunet_rc_destroy (rc); - rc = NULL; - } - if (NULL != prh) - { - TALER_MERCHANT_reserves_post_cancel (prh); - prh = NULL; - } -} - - -/** - * Function that makes the call to setup the reserve. - * - * @param cls NULL - */ -static void -do_request (void *cls); - - -/** - * Callbacks of this type are used to work the result of submitting a - * POST /reserves request to a merchant - * - * @param cls closure - * @param prr response details - */ -static void -result_cb (void *cls, - const struct TALER_MERCHANT_PostReservesResponse *prr) -{ - (void) cls; - prh = NULL; - switch (prr->hr.http_status) - { - case MHD_HTTP_OK: - { - char res_str[sizeof (prr->details.ok.reserve_pub) * 2 + 1]; - - GNUNET_STRINGS_data_to_string (&prr->details.ok.reserve_pub, - sizeof (prr->details.ok.reserve_pub), - res_str, - sizeof (res_str)); - for (unsigned int i = 0; i<prr->details.ok.accounts_len; i++) - { - const struct TALER_EXCHANGE_WireAccount *wa - = &prr->details.ok.accounts[i]; - const char *payto_uri = wa->payto_uri; - bool skip = false; - - for (unsigned int j = 0; j<wa->credit_restrictions_length; j++) - if (TALER_EXCHANGE_AR_DENY == - wa->credit_restrictions[j].type) - skip = true; - if (skip) - continue; - if (NULL != strchr (payto_uri, '?')) - fprintf (stdout, - "%s&message=%s\n", - payto_uri, - res_str); - else - fprintf (stdout, - "%s?message=%s\n", - payto_uri, - res_str); - if (NULL != wa->conversion_url) - fprintf (stdout, - "\tConversion needed: %s\n", - wa->conversion_url); - for (unsigned int j = 0; j<wa->credit_restrictions_length; j++) - { - const struct TALER_EXCHANGE_AccountRestriction *cr - = &wa->credit_restrictions[j]; - - switch (cr->type) - { - case TALER_EXCHANGE_AR_INVALID: - GNUNET_assert (0); - break; - case TALER_EXCHANGE_AR_DENY: - GNUNET_assert (0); - break; - case TALER_EXCHANGE_AR_REGEX: - fprintf (stdout, - "\tCredit restriction: %s (%s)\n", - cr->details.regex.human_hint, - cr->details.regex.posix_egrep); - break; - } - } - } - } - break; - case MHD_HTTP_CONFLICT: - fprintf (stderr, - "Conflict trying to setup reserve: %u/%d\nHint: %s\n", - prr->hr.http_status, - (int) prr->hr.ec, - prr->hr.hint); - global_ret = 1; - break; - case MHD_HTTP_INTERNAL_SERVER_ERROR: - case MHD_HTTP_BAD_GATEWAY: - tries++; - if (tries < MAX_TRIES) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "Merchant failed, will try again.\n"); - task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, - &do_request, - NULL); - return; - } - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Merchant failed too often (%u/%d), giving up\n", - prr->hr.http_status, - prr->hr.ec); - global_ret = 1; - break; - default: - fprintf (stderr, - "Unexpected backend failure: %u/%d\nHint: %s\n", - prr->hr.http_status, - (int) prr->hr.ec, - prr->hr.hint); - global_ret = 1; - break; - } - GNUNET_SCHEDULER_shutdown (); -} - - -/** - * Main function that will be run. - * - * @param cls closure - * @param args remaining command-line arguments - * @param cfgfile name of the configuration file used (for saving, can be NULL!) - * @param config configuration - */ -static void -run (void *cls, - char *const *args, - const char *cfgfile, - const struct GNUNET_CONFIGURATION_Handle *config) -{ - /* setup HTTP client event loop */ - ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule, - &rc); - rc = GNUNET_CURL_gnunet_rc_create (ctx); - if (NULL != userpass) - GNUNET_CURL_set_userpass (ctx, - userpass); - if (NULL != keyfile) - GNUNET_CURL_set_tlscert (ctx, - certtype, - certfile, - keyfile, - keypass); - if (NULL != apikey) - { - char *auth_header; - - GNUNET_asprintf (&auth_header, - "%s: %s", - MHD_HTTP_HEADER_AUTHORIZATION, - apikey); - if (GNUNET_OK != - GNUNET_CURL_append_header (ctx, - auth_header)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed so set %s header, trying without\n", - MHD_HTTP_HEADER_AUTHORIZATION); - } - GNUNET_free (auth_header); - } - /* setup termination logic */ - GNUNET_SCHEDULER_add_shutdown (&do_shutdown, - NULL); - task = GNUNET_SCHEDULER_add_now (&do_request, - NULL); -} - - -static void -do_request (void *cls) -{ - (void) cls; - task = NULL; - /* run actual (async) operation */ - prh = TALER_MERCHANT_reserves_post (ctx, - merchant_base_url, - &initial_amount, - exchange_base_url, - wire_method, - &result_cb, - NULL); - if (NULL == prh) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Failed to begin operation with merchant backend!\n"); - global_ret = 2; - GNUNET_SCHEDULER_shutdown (); - return; - } -} - - -/** - * The main function for setting up reserves for tipping. - * - * @param argc number of arguments from the command line - * @param argv command line arguments - * @return 0 ok, 1 on error - */ -int -main (int argc, - char *const *argv) -{ - struct GNUNET_GETOPT_CommandLineOption options[] = { - GNUNET_GETOPT_option_mandatory ( - TALER_getopt_get_amount ('a', - "amount", - "VALUE", - "amount to be transferred into the reserve", - &initial_amount)), - GNUNET_GETOPT_option_string ('A', - "auth", - "USERNAME:PASSWORD", - "use the given USERNAME and PASSWORD for client authentication", - &userpass), - GNUNET_GETOPT_option_string ('C', - "cert", - "CERTFILE", - "name of the TLS client certificate file", - &certfile), - GNUNET_GETOPT_option_mandatory ( - GNUNET_GETOPT_option_string ('e', - "exchange-url", - "URL", - "base URL of the exchange to create the reserve at", - &exchange_base_url)), - GNUNET_GETOPT_option_string ('k', - "key", - "KEYFILE", - "file with the private TLS key for TLS client authentication", - &keyfile), - GNUNET_GETOPT_option_mandatory ( - GNUNET_GETOPT_option_string ('m', - "merchant-url", - "URL", - "base URL of the merchant backend's REST API", - &merchant_base_url)), - GNUNET_GETOPT_option_string ('p', - "pass", - "KEYFILEPASSPHRASE", - "passphrase needed to decrypt the TLS client private key file", - &keypass), - GNUNET_GETOPT_option_string ('K', - "apikey", - "APIKEY", - "API key to use in the HTTP request", - &apikey), - GNUNET_GETOPT_option_string ('t', - "type", - "CERTTYPE", - "type of the TLS client certificate, defaults to PEM if not specified", - &certtype), - GNUNET_GETOPT_option_version (PACKAGE_VERSION), - GNUNET_GETOPT_option_mandatory ( - GNUNET_GETOPT_option_string ('w', - "wire-method", - "METHOD", - "wire method to use for the wire transfer (i.e. IBAN)", - &wire_method)), - GNUNET_GETOPT_OPTION_END - }; - enum GNUNET_GenericReturnValue ret; - - /* force linker to link against libtalerutil; if we do - not do this, the linker may "optimize" libtalerutil - away and skip #TALER_OS_init(), which we do need */ - (void) TALER_project_data_default (); - ret = GNUNET_PROGRAM_run ( - argc, argv, - "taler-merchant-setup-reserve", - gettext_noop ("Setup reserve for tipping"), - options, - &run, NULL); - if (GNUNET_SYSERR == ret) - return 3; - if (GNUNET_NO == ret) - return 0; - return global_ret; -} - - -/* end of taler-merchant-setup-reserve.c */