commit 6a4aeb9cd66c6586042cfe15438b7ad25b94804d
parent 7d2f5ba035349f45ea5e54be02be651b377c68cc
Author: Christian Grothoff <christian@grothoff.org>
Date: Sun, 29 Dec 2024 14:03:39 +0100
fix #9420 + #9428
Diffstat:
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 = \