From 087de13e0a2173f8f1f87bcef1fe8e33c23e4967 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 15 Jan 2020 00:15:40 +0100 Subject: [PATCH] use new parsing API, fixes issues --- src/bank-lib/bank_api_common.c | 2 + src/bank-lib/bank_api_payto.c | 69 +++++++--------------------------- src/lib/exchange_api_handle.c | 3 +- src/lib/test_exchange_api.c | 4 -- 4 files changed, 17 insertions(+), 61 deletions(-) diff --git a/src/bank-lib/bank_api_common.c b/src/bank-lib/bank_api_common.c index 8a8f4289f..d9df5b39f 100644 --- a/src/bank-lib/bank_api_common.c +++ b/src/bank-lib/bank_api_common.c @@ -70,6 +70,8 @@ TALER_BANK_setup_auth_ (CURL *easy, /** * Obtain the URL to use for an API request. + * FIXME: duplicates MAH_path_to_url2, and likely also logic in util! + * FIXME: duplicates TEAH_path_to_url2, and likely also logic in util! * * @param u base URL of the bank. * @param path Taler API path (i.e. "/history"). diff --git a/src/bank-lib/bank_api_payto.c b/src/bank-lib/bank_api_payto.c index 5f87eb796..c429561e6 100644 --- a/src/bank-lib/bank_api_payto.c +++ b/src/bank-lib/bank_api_payto.c @@ -399,74 +399,31 @@ parse_payto_iban (const char *account_url, * Parse payto://x-taler-bank/ account URL (only account information, * wire subject and amount are ignored). * - * @param account_url URL to parse + * @param payto_url URL to parse * @param account[out] set to information, can be NULL * @return #TALER_EC_NONE if @a account_url is well-formed */ static enum TALER_ErrorCode -parse_payto_x_taler_bank (const char *account_url, +parse_payto_x_taler_bank (const char *payto_url, struct TALER_Account *r_account) { - const char *hostname; - const char *account; - const char *q; - unsigned int port; - char *p; - #define PREFIX "payto://x-taler-bank/" - if (0 != strncasecmp (account_url, + if (0 != strncasecmp (payto_url, PREFIX, strlen (PREFIX))) return TALER_EC_PAYTO_WRONG_METHOD; - hostname = &account_url[strlen (PREFIX)]; - if (NULL == (account = strchr (hostname, - (unsigned char) '/'))) - return TALER_EC_PAYTO_MALFORMED; - account++; - if (NULL == r_account) - return TALER_EC_NONE; - q = strchr (account, - (unsigned char) '?'); - if (0 == q) - q = account + strlen (account); +#undef PREFIX r_account->details.x_taler_bank.hostname - = GNUNET_strndup (hostname, - account - hostname); - port = 443; /* if non given, equals 443. */ - if (NULL != (p = strchr (r_account->details.x_taler_bank.hostname, - (unsigned char) ':'))) + = TALER_xtalerbank_base_url_from_payto (payto_url); + if (NULL == r_account->details.x_taler_bank.hostname) + return TALER_EC_PAYTO_MALFORMED; + r_account->details.x_taler_bank.account_base_url + = TALER_xtalerbank_account_url_from_payto (payto_url); + if (NULL == r_account->details.x_taler_bank.hostname) { - p++; - if (1 != sscanf (p, - "%u", - &port)) - { - GNUNET_break (0); - TALER_LOG_ERROR ("Malformed host from payto:// URI\n"); - GNUNET_free (r_account->details.x_taler_bank.hostname); - r_account->details.x_taler_bank.hostname = NULL; - return TALER_EC_PAYTO_MALFORMED; - } - } - if (443 != port) - { - GNUNET_assert - (GNUNET_SYSERR != GNUNET_asprintf - (&r_account->details.x_taler_bank.account_base_url, - "http://%s/%.*s", - r_account->details.x_taler_bank.hostname, - (int) (q - account), - account)); - } - else - { - GNUNET_assert - (GNUNET_SYSERR != GNUNET_asprintf - (&r_account->details.x_taler_bank.account_base_url, - "https://%s/%.*s", - r_account->details.x_taler_bank.hostname, - (int) (q - account), - account)); + GNUNET_free (r_account->details.x_taler_bank.hostname); + r_account->details.x_taler_bank.hostname = NULL; + return TALER_EC_PAYTO_MALFORMED; } r_account->type = TALER_PAC_X_TALER_BANK; return TALER_EC_NONE; diff --git a/src/lib/exchange_api_handle.c b/src/lib/exchange_api_handle.c index 6b51519fd..c7b402b5e 100644 --- a/src/lib/exchange_api_handle.c +++ b/src/lib/exchange_api_handle.c @@ -1262,7 +1262,7 @@ keys_completed_cb (void *cls, for (unsigned int i = 0; i