merchant

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

commit 6a4aeb9cd66c6586042cfe15438b7ad25b94804d
parent 7d2f5ba035349f45ea5e54be02be651b377c68cc
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sun, 29 Dec 2024 14:03:39 +0100

fix #9420 + #9428

Diffstat:
Msrc/backend/taler-merchant-httpd_mhd.c | 39++++++---------------------------------
Msrc/backend/taler-merchant-httpd_statics.c | 15+++++++++------
Msrc/backenddb/Makefile.am | 210++++++++++++++++++++++++++++++++++++++++----------------------------------------
3 files changed, 120 insertions(+), 144 deletions(-)

diff --git a/src/backend/taler-merchant-httpd_mhd.c b/src/backend/taler-merchant-httpd_mhd.c @@ -56,44 +56,17 @@ TMH_MHD_handler_agpl_redirect (const struct TMH_RequestHandler *rh, bool TMH_MHD_test_html_desired (struct MHD_Connection *connection) { - bool ret = false; const char *accept; - // FIXME-#9428: use TALER_MHD_check_accept here! accept = MHD_lookup_connection_value (connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_ACCEPT); - if (NULL != accept) - { - char *a = GNUNET_strdup (accept); - char *saveptr; - - for (char *t = strtok_r (a, ",", &saveptr); - NULL != t; - t = strtok_r (NULL, ",", &saveptr)) - { - char *end; - - /* skip leading whitespace */ - while (isspace ((unsigned char) t[0])) - t++; - /* trim of ';q=' parameter and everything after space */ - end = strchr (t, ';'); - if (NULL != end) - *end = '\0'; - end = strchr (t, ' '); - if (NULL != end) - *end = '\0'; - if (0 == strcasecmp ("text/html", - t)) - { - ret = true; - break; - } - } - GNUNET_free (a); - } - return ret; + if (NULL == accept) + return false; /* nothing selected, we read this as not HTML */ + if (0.0 < TALER_pattern_matches (accept, + "text/html")) + return true; + return false; } diff --git a/src/backend/taler-merchant-httpd_statics.c b/src/backend/taler-merchant-httpd_statics.c @@ -76,6 +76,7 @@ static const struct TVE * lookup_file (struct MHD_Connection *connection, const char *name) { + double best_q = 0.0; struct TVE *best = NULL; const char *lang; @@ -87,17 +88,19 @@ lookup_file (struct MHD_Connection *connection, /* find best match by language */ for (unsigned int i = 0; i<loaded_length; i++) { + double q; + if (0 != strcmp (loaded[i].name, name)) continue; /* does not match by name */ if (NULL == loaded[i].lang) /* no language == always best match */ return &loaded[i]; - if ( (NULL == best) || - (TALER_language_matches (lang, - loaded[i].lang) > - TALER_language_matches (lang, - best->lang) ) ) - best = &loaded[i]; + q = TALER_pattern_matches (lang, + loaded[i].lang); + if (q < best_q) + continue; + best_q = q; + best = &loaded[i]; } if (NULL == best) { diff --git a/src/backenddb/Makefile.am b/src/backenddb/Makefile.am @@ -74,131 +74,131 @@ libtalermerchantdb_la_LDFLAGS = \ -no-undefined libtaler_plugin_merchantdb_postgres_la_SOURCES = \ - pg_update_wirewatch_progress.h pg_update_wirewatch_progress.c \ - pg_select_wirewatch_accounts.h pg_select_wirewatch_accounts.c \ - pg_insert_account.h pg_insert_account.c \ - pg_update_account.h pg_update_account.c \ - pg_insert_deposit_to_transfer.h pg_insert_deposit_to_transfer.c \ + pg_account_kyc_get_status.h pg_account_kyc_get_status.c \ pg_account_kyc_set_failed.h pg_account_kyc_set_failed.c \ - pg_increase_refund.h pg_increase_refund.c \ - pg_insert_transfer.h pg_insert_transfer.c \ - pg_insert_transfer_details.h pg_insert_transfer_details.c \ - pg_store_wire_fee_by_exchange.h pg_store_wire_fee_by_exchange.c \ - pg_select_open_transfers.h pg_select_open_transfers.c \ - pg_lookup_categories.h pg_lookup_categories.c \ - pg_select_category_by_name.h pg_select_category_by_name.c \ - pg_select_category.h pg_select_category.c \ - pg_update_category.h pg_update_category.c \ - pg_insert_category.h pg_insert_category.c \ + pg_account_kyc_set_status.h pg_account_kyc_set_status.c \ + pg_activate_account.h pg_activate_account.c \ + pg_check_transfer_exists.h pg_check_transfer_exists.c \ pg_delete_category.h pg_delete_category.c \ - pg_lookup_instances.h pg_lookup_instances.c \ - pg_lookup_transfers.h pg_lookup_transfers.c \ - pg_update_transfer_status.h pg_update_transfer_status.c \ + pg_delete_contract_terms.h pg_delete_contract_terms.c \ pg_delete_exchange_accounts.h pg_delete_exchange_accounts.c \ - pg_select_accounts_by_exchange.h pg_select_accounts_by_exchange.c \ - pg_set_transfer_status_to_confirmed.h pg_set_transfer_status_to_confirmed.c \ - pg_insert_exchange_account.h pg_insert_exchange_account.c \ - pg_insert_login_token.h pg_insert_login_token.c \ - pg_delete_login_token.h pg_delete_login_token.c \ - pg_select_login_token.h pg_select_login_token.c \ - pg_select_account_by_uri.h pg_select_account_by_uri.c \ - pg_lookup_instance_auth.h pg_lookup_instance_auth.c \ - pg_lookup_pending_deposits.h pg_lookup_pending_deposits.c \ - pg_insert_instance.h pg_insert_instance.c \ - pg_account_kyc_set_status.h pg_account_kyc_set_status.c \ - pg_get_kyc_status.h pg_get_kyc_status.c \ - pg_get_kyc_limits.h pg_get_kyc_limits.c \ - pg_account_kyc_get_status.h pg_account_kyc_get_status.c \ pg_delete_instance_private_key.h pg_delete_instance_private_key.c \ - pg_purge_instance.h pg_purge_instance.c \ - pg_update_instance.h pg_update_instance.c \ - pg_update_deposit_confirmation_status.h pg_update_deposit_confirmation_status.c \ - pg_update_instance_auth.h pg_update_instance_auth.c \ - pg_inactivate_account.h pg_inactivate_account.c \ - pg_activate_account.h pg_activate_account.c \ - pg_insert_otp.h pg_insert_otp.c \ + pg_delete_login_token.h pg_delete_login_token.c \ + pg_delete_order.h pg_delete_order.c \ pg_delete_otp.h pg_delete_otp.c \ - pg_update_otp.h pg_update_otp.c \ - pg_select_otp.h pg_select_otp.c \ - pg_select_otp_serial.h pg_select_otp_serial.c \ - pg_lookup_otp_devices.h pg_lookup_otp_devices.c \ - pg_select_account.h pg_select_account.c \ - pg_select_accounts.h pg_select_accounts.c \ - pg_delete_template.h pg_delete_template.c \ - pg_insert_template.h pg_insert_template.c \ - pg_update_template.h pg_update_template.c \ - pg_lookup_token_family_keys.h pg_lookup_token_family_keys.c \ - pg_lookup_templates.h pg_lookup_templates.c \ - pg_lookup_template.h pg_lookup_template.c \ - pg_lookup_all_products.h pg_lookup_all_products.c \ - pg_lookup_products.h pg_lookup_products.c \ - pg_lookup_product.h pg_lookup_product.c \ + pg_delete_pending_webhook.h pg_delete_pending_webhook.c \ pg_delete_product.h pg_delete_product.c \ - pg_insert_product.h pg_insert_product.c \ - pg_update_product.h pg_update_product.c \ - pg_lock_product.h pg_lock_product.c \ - pg_insert_exchange_keys.h pg_insert_exchange_keys.c \ - pg_select_exchange_keys.h pg_select_exchange_keys.c \ + pg_delete_template.h pg_delete_template.c \ + pg_delete_token_family.h pg_delete_token_family.c \ + pg_delete_transfer.h pg_delete_transfer.c \ + pg_delete_webhook.h pg_delete_webhook.c \ pg_expire_locks.h pg_expire_locks.c \ - pg_delete_order.h pg_delete_order.c \ - pg_lookup_order.h pg_lookup_order.c \ - pg_lookup_order_summary.h pg_lookup_order_summary.c \ - pg_lookup_orders.h pg_lookup_orders.c \ + pg_get_kyc_limits.h pg_get_kyc_limits.c \ + pg_get_kyc_status.h pg_get_kyc_status.c \ + pg_helper.h pg_helper.c \ + pg_inactivate_account.h pg_inactivate_account.c \ + pg_increase_refund.h pg_increase_refund.c \ + pg_insert_account.h pg_insert_account.c \ + pg_insert_category.h pg_insert_category.c \ + pg_insert_contract_terms.h pg_insert_contract_terms.c \ + pg_insert_deposit.h pg_insert_deposit.c \ + pg_insert_deposit_confirmation.h pg_insert_deposit_confirmation.c \ + pg_insert_deposit_to_transfer.h pg_insert_deposit_to_transfer.c \ + pg_insert_exchange_account.h pg_insert_exchange_account.c \ + pg_insert_exchange_keys.h pg_insert_exchange_keys.c \ + pg_insert_exchange_signkey.h pg_insert_exchange_signkey.c \ + pg_insert_instance.h pg_insert_instance.c \ + pg_insert_issued_token.h pg_insert_issued_token.c \ + pg_insert_login_token.h pg_insert_login_token.c \ pg_insert_order.h pg_insert_order.c \ - pg_unlock_inventory.h pg_unlock_inventory.c \ pg_insert_order_lock.h pg_insert_order_lock.c \ - pg_lookup_contract_terms3.h pg_lookup_contract_terms3.c \ - pg_lookup_contract_terms2.h pg_lookup_contract_terms2.c \ + pg_insert_otp.h pg_insert_otp.c \ + pg_insert_pending_webhook.h pg_insert_pending_webhook.c \ + pg_insert_product.h pg_insert_product.c \ + pg_insert_refund_proof.h pg_insert_refund_proof.c \ + pg_insert_spent_token.h pg_insert_spent_token.c \ + pg_insert_template.h pg_insert_template.c \ + pg_insert_token_family.h pg_insert_token_family.c \ + pg_insert_token_family_key.h pg_insert_token_family_key.c \ + pg_insert_transfer.h pg_insert_transfer.c \ + pg_insert_transfer_details.h pg_insert_transfer_details.c \ + pg_insert_webhook.h pg_insert_webhook.c \ + pg_lock_product.h pg_lock_product.c \ + pg_lookup_account.h pg_lookup_account.c \ + pg_lookup_all_products.h pg_lookup_all_products.c \ + pg_lookup_categories.h pg_lookup_categories.c \ pg_lookup_contract_terms.h pg_lookup_contract_terms.c \ - pg_insert_contract_terms.h pg_insert_contract_terms.c \ - pg_update_contract_terms.h pg_update_contract_terms.c \ - pg_delete_contract_terms.h pg_delete_contract_terms.c \ + pg_lookup_contract_terms2.h pg_lookup_contract_terms2.c \ + pg_lookup_contract_terms3.h pg_lookup_contract_terms3.c \ pg_lookup_deposits.h pg_lookup_deposits.c \ - pg_insert_exchange_signkey.h pg_insert_exchange_signkey.c \ - pg_insert_deposit.h pg_insert_deposit.c \ - pg_insert_deposit_confirmation.h pg_insert_deposit_confirmation.c \ - pg_lookup_refunds.h pg_lookup_refunds.c \ - pg_mark_contract_paid.h pg_mark_contract_paid.c \ - pg_refund_coin.h pg_refund_coin.c \ + pg_lookup_deposits_by_contract_and_coin.h pg_lookup_deposits_by_contract_and_coin.c \ + pg_lookup_deposits_by_order.h pg_lookup_deposits_by_order.c \ + pg_lookup_instance_auth.h pg_lookup_instance_auth.c \ + pg_lookup_instances.h pg_lookup_instances.c \ + pg_lookup_order.h pg_lookup_order.c \ + pg_lookup_order_by_fulfillment.h pg_lookup_order_by_fulfillment.c \ pg_lookup_order_status.h pg_lookup_order_status.c \ pg_lookup_order_status_by_serial.h pg_lookup_order_status_by_serial.c \ - pg_lookup_deposits_by_order.h pg_lookup_deposits_by_order.c \ - pg_lookup_transfer_details_by_order.h pg_lookup_transfer_details_by_order.c \ - pg_mark_order_wired.h pg_mark_order_wired.c \ - pg_lookup_refunds_detailed.h pg_lookup_refunds_detailed.c \ - pg_insert_refund_proof.h pg_insert_refund_proof.c \ + pg_lookup_order_summary.h pg_lookup_order_summary.c \ + pg_lookup_orders.h pg_lookup_orders.c \ + pg_lookup_otp_devices.h pg_lookup_otp_devices.c \ + pg_lookup_pending_deposits.h pg_lookup_pending_deposits.c \ + pg_lookup_pending_webhooks.h pg_lookup_pending_webhooks.c \ + pg_lookup_product.h pg_lookup_product.c \ + pg_lookup_products.h pg_lookup_products.c \ pg_lookup_refund_proof.h pg_lookup_refund_proof.c \ - pg_lookup_order_by_fulfillment.h pg_lookup_order_by_fulfillment.c \ - pg_delete_transfer.h pg_delete_transfer.c \ - pg_check_transfer_exists.h pg_check_transfer_exists.c \ - pg_lookup_account.h pg_lookup_account.c \ - pg_lookup_wire_fee.h pg_lookup_wire_fee.c \ - pg_lookup_deposits_by_contract_and_coin.h pg_lookup_deposits_by_contract_and_coin.c \ + pg_lookup_refunds.h pg_lookup_refunds.c \ + pg_lookup_refunds_detailed.h pg_lookup_refunds_detailed.c \ + pg_lookup_spent_tokens_by_order.h pg_lookup_spent_tokens_by_order.c \ + pg_lookup_template.h pg_lookup_template.c \ + pg_lookup_templates.h pg_lookup_templates.c \ + pg_lookup_token_families.h pg_lookup_token_families.c \ + pg_lookup_token_family.h pg_lookup_token_family.c \ + pg_lookup_token_family_key.h pg_lookup_token_family_key.c \ + pg_lookup_token_family_keys.h pg_lookup_token_family_keys.c \ pg_lookup_transfer.h pg_lookup_transfer.c \ - pg_lookup_transfer_summary.h pg_lookup_transfer_summary.c \ pg_lookup_transfer_details.h pg_lookup_transfer_details.c \ - pg_lookup_webhooks.h pg_lookup_webhooks.c \ + pg_lookup_transfer_details_by_order.h pg_lookup_transfer_details_by_order.c \ + pg_lookup_transfer_summary.h pg_lookup_transfer_summary.c \ + pg_lookup_transfers.h pg_lookup_transfers.c \ pg_lookup_webhook.h pg_lookup_webhook.c \ - pg_delete_webhook.h pg_delete_webhook.c \ - pg_insert_webhook.h pg_insert_webhook.c \ - pg_update_webhook.h pg_update_webhook.c \ pg_lookup_webhook_by_event.h pg_lookup_webhook_by_event.c \ - pg_delete_pending_webhook.h pg_delete_pending_webhook.c \ - pg_insert_pending_webhook.h pg_insert_pending_webhook.c \ + pg_lookup_webhooks.h pg_lookup_webhooks.c \ + pg_lookup_wire_fee.h pg_lookup_wire_fee.c \ + pg_mark_contract_paid.h pg_mark_contract_paid.c \ + pg_mark_order_wired.h pg_mark_order_wired.c \ + pg_purge_instance.h pg_purge_instance.c \ + pg_refund_coin.h pg_refund_coin.c \ + pg_select_account.h pg_select_account.c \ + pg_select_account_by_uri.h pg_select_account_by_uri.c \ + pg_select_accounts.h pg_select_accounts.c \ + pg_select_accounts_by_exchange.h pg_select_accounts_by_exchange.c \ + pg_select_category.h pg_select_category.c \ + pg_select_category_by_name.h pg_select_category_by_name.c \ + pg_select_exchange_keys.h pg_select_exchange_keys.c \ + pg_select_login_token.h pg_select_login_token.c \ + pg_select_open_transfers.h pg_select_open_transfers.c \ + pg_select_otp.h pg_select_otp.c \ + pg_select_otp_serial.h pg_select_otp_serial.c \ + pg_select_wirewatch_accounts.h pg_select_wirewatch_accounts.c \ + pg_set_transfer_status_to_confirmed.h pg_set_transfer_status_to_confirmed.c \ + pg_store_wire_fee_by_exchange.h pg_store_wire_fee_by_exchange.c \ + pg_unlock_inventory.h pg_unlock_inventory.c \ + pg_update_account.h pg_update_account.c \ + pg_update_category.h pg_update_category.c \ + pg_update_contract_terms.h pg_update_contract_terms.c \ + pg_update_deposit_confirmation_status.h pg_update_deposit_confirmation_status.c \ + pg_update_instance.h pg_update_instance.c \ + pg_update_instance_auth.h pg_update_instance_auth.c \ + pg_update_otp.h pg_update_otp.c \ pg_update_pending_webhook.h pg_update_pending_webhook.c \ - pg_lookup_pending_webhooks.h pg_lookup_pending_webhooks.c \ - pg_insert_token_family.h pg_insert_token_family.c \ - pg_lookup_token_family.h pg_lookup_token_family.c \ - pg_lookup_token_families.h pg_lookup_token_families.c \ - pg_delete_token_family.h pg_delete_token_family.c \ + pg_update_product.h pg_update_product.c \ + pg_update_template.h pg_update_template.c \ pg_update_token_family.h pg_update_token_family.c \ - pg_insert_token_family_key.h pg_insert_token_family_key.c \ - pg_lookup_token_family_key.h pg_lookup_token_family_key.c \ - pg_insert_spent_token.h pg_insert_spent_token.c \ - pg_insert_issued_token.h pg_insert_issued_token.c \ - pg_lookup_spent_tokens_by_order.h pg_lookup_spent_tokens_by_order.c \ - plugin_merchantdb_postgres.c \ - pg_helper.h pg_helper.c + pg_update_transfer_status.h pg_update_transfer_status.c \ + pg_update_webhook.h pg_update_webhook.c \ + pg_update_wirewatch_progress.h pg_update_wirewatch_progress.c \ + plugin_merchantdb_postgres.c libtaler_plugin_merchantdb_postgres_la_LIBADD = \ $(LTLIBINTL) libtaler_plugin_merchantdb_postgres_la_LDFLAGS = \