merchant

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

commit 2625647c7bfb06f052ff5f77c7fb43f1d069c74c
parent 063140e4872549d4aa348913377ba707a591a878
Author: Bohdan Potuzhnyi <potub1@bfh.ch>
Date:   Mon,  7 Oct 2024 15:03:29 +0000

Merge branch 'master' into dev/bohdan-potuzhnyi/donau-integration

Diffstat:
Msrc/backend/taler-merchant-httpd_exchanges.c | 30++++++++++++++++++++++++++++--
Msrc/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c | 18++++++++++++++++++
Msrc/backend/taler-merchant-httpd_private-post-orders.c | 29++++++++++++++++++++++++-----
3 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_exchanges.c b/src/backend/taler-merchant-httpd_exchanges.c @@ -35,7 +35,7 @@ * Threshold after which exponential backoff should not increase. */ #define RETRY_BACKOFF_THRESHOLD GNUNET_TIME_relative_multiply ( \ - GNUNET_TIME_UNIT_SECONDS, 60) + GNUNET_TIME_UNIT_SECONDS, 60) /** * This is how long /keys long-polls for, so we should @@ -43,7 +43,7 @@ * answer. See exchange_api_handle.c. */ #define LONG_POLL_THRESHOLD GNUNET_TIME_relative_multiply ( \ - GNUNET_TIME_UNIT_SECONDS, 120) + GNUNET_TIME_UNIT_SECONDS, 120) /** @@ -720,6 +720,12 @@ TMH_exchange_check_debit ( &kyc_ok, &jlimits); GNUNET_break (qs >= 0); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "get_kyc_limits for %s at %s returned %s/%s\n", + wm->payto_uri, + exchange->url, + kyc_ok ? "KYC OK" : "KYC missing", + NULL == jlimits ? "default limits" : "custom limits"); if ( (qs > 0) && (NULL != jlimits) ) { @@ -756,6 +762,10 @@ TMH_exchange_check_debit ( if ( (TALER_KYCLOGIC_KYC_TRIGGER_DEPOSIT != ot) && (TALER_KYCLOGIC_KYC_TRIGGER_TRANSACTION != ot) ) continue; + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "KYC rule %u with limit %s applies\n", + (unsigned int) idx, + TALER_amount2s (&threshold)); if (unlimited) { unlimited = false; @@ -794,6 +804,9 @@ TMH_exchange_check_debit ( } else { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Evaluating default limits of %s\n", + exchange->url); TALER_EXCHANGE_keys_evaluate_hard_limits ( keys, TALER_KYCLOGIC_KYC_TRIGGER_DEPOSIT, @@ -802,6 +815,19 @@ TMH_exchange_check_debit ( keys, TALER_KYCLOGIC_KYC_TRIGGER_TRANSACTION, max_amount); + if (TALER_EXCHANGE_keys_evaluate_zero_limits ( + keys, + TALER_KYCLOGIC_KYC_TRIGGER_DEPOSIT) || + TALER_EXCHANGE_keys_evaluate_zero_limits ( + keys, + TALER_KYCLOGIC_KYC_TRIGGER_TRANSACTION)) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Operation is zero-limited by default\n"); + GNUNET_assert (GNUNET_OK == + TALER_amount_set_zero (max_amount->currency, + max_amount)); + } } return account_ok ? GNUNET_YES : GNUNET_NO; } diff --git a/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c b/src/backend/taler-merchant-httpd_private-get-instances-ID-kyc.c @@ -459,9 +459,21 @@ get_exchange_limits ( json_t *limits; if (NULL != ekr->jlimits) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Returning custom KYC limits\n"); return json_incref (ekr->jlimits); + } if (NULL == keys) + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "No keys, thus no default KYC limits known\n"); return NULL; + } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Returning default KYC limits (%u/%u)\n", + keys->hard_limits_length, + keys->zero_limits_length); limits = json_array (); GNUNET_assert (NULL != limits); for (unsigned int i = 0; i<keys->hard_limits_length; i++) @@ -516,6 +528,9 @@ ekr_expand_response (struct ExchangeKycRequest *ekr) GNUNET_JSON_pack_string ( "payto_uri", ekr->payto_uri), + GNUNET_JSON_pack_data_auto ( + "h_wire", + &ekr->h_wire), GNUNET_JSON_pack_string ( "exchange_url", ekr->exchange_url), @@ -683,6 +698,9 @@ determine_eligible_accounts ( : '&', TALER_amount2s (&kyc_amount), merchant_pub_str); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Found account %s where KYC auth is possible\n", + payto_kycauth); GNUNET_assert (0 == json_array_append_new (ekr->pkaa, json_string (payto_kycauth))); diff --git a/src/backend/taler-merchant-httpd_private-post-orders.c b/src/backend/taler-merchant-httpd_private-post-orders.c @@ -1982,11 +1982,19 @@ get_acceptable (void *cls, priority = 768; /* stale, no accounts yet */ break; } - GNUNET_break (0 <= - TALER_amount_add ( - &oc->set_exchanges.total_exchange_limit, - &oc->set_exchanges.total_exchange_limit, - &max_amount)); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Exchange %s deposit limit is %s, adding it!\n", + url, + TALER_amount2s (&max_amount)); + GNUNET_assert (0 <= + TALER_amount_add ( + &oc->set_exchanges.total_exchange_limit, + &oc->set_exchanges.total_exchange_limit, + &max_amount)); + GNUNET_assert (GNUNET_OK == + TALER_amount_min (&oc->set_exchanges.total_exchange_limit, + &oc->set_exchanges.total_exchange_limit, + &oc->parse_order.brutto)); j_exchange = GNUNET_JSON_PACK ( GNUNET_JSON_pack_string ("url", url), @@ -2169,11 +2177,16 @@ set_exchanges (struct OrderContext *oc) if (TALER_amount_is_zero (&oc->parse_order.brutto)) { /* Total amount is zero, so we don't actually need exchanges! */ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Order total is zero, no need for exchanges\n"); oc->set_exchanges.exchanges = json_array (); GNUNET_assert (NULL != oc->set_exchanges.exchanges); oc->phase++; return false; } + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Order total is %s, trying to find exchanges\n", + TALER_amount2s (&oc->parse_order.brutto)); /* Note: re-building 'oc->set_exchanges.exchanges' every time here might be a tad expensive; could likely consider caching the result if it starts to matter. */ @@ -2262,6 +2275,12 @@ set_exchanges (struct OrderContext *oc) GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "Creating order, but possibly without usable trusted exchanges\n"); } + else + { + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Can create order: %s is the sum of hard limits from supported exchanges\n", + TALER_amount2s (&oc->set_exchanges.total_exchange_limit)); + } oc->phase++; return false; }