From c4ffdfa3f2c736e4324f11df7a35340f0e64e9a9 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Wed, 19 Aug 2020 18:26:22 +0200 Subject: implement #6458 --- src/backend/taler-merchant-httpd_get-orders-ID.c | 51 ++++++++++++++++-------- 1 file changed, 35 insertions(+), 16 deletions(-) (limited to 'src/backend/taler-merchant-httpd_get-orders-ID.c') diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c b/src/backend/taler-merchant-httpd_get-orders-ID.c index 142ba999..75f83862 100644 --- a/src/backend/taler-merchant-httpd_get-orders-ID.c +++ b/src/backend/taler-merchant-httpd_get-orders-ID.c @@ -450,6 +450,34 @@ TMH_make_taler_pay_uri (struct MHD_Connection *con, } +/** + * Return the order summary of the contract of @a god in the + * preferred language of the HTTP client. + * + * @param god order to extract summary from + * @return NULL if no summary was provided in the contract + */ +static const char * +get_order_summary (struct GetOrderData *god) +{ + const char *language_pattern; + const char *ret; + + language_pattern = MHD_lookup_connection_value (god->sc.con, + MHD_HEADER_KIND, + MHD_HTTP_HEADER_ACCEPT_LANGUAGE); + if (NULL == language_pattern) + language_pattern = "en"; + ret = json_string_value (TALER_JSON_extract_i18n (god->contract_terms, + language_pattern, + "summary")); + if (NULL == ret) + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "No order summary found!\n"); + return ret; +} + + /** * The client did not yet pay, send it the payment request. * @@ -510,10 +538,7 @@ send_pay_request (struct GetOrderData *god, { "taler_pay_qrcode_svg", qr }, { "order_summary", - // FIXME #6458: implement logic to extract summary based on - // language preferences from summary_i18n if present. - json_string_value (json_object_get (god->contract_terms, - "summary")) }, + get_order_summary (god) }, { NULL, NULL } }; enum GNUNET_GenericReturnValue res; @@ -846,7 +871,8 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh, TALER_EC_GET_ORDERS_DB_LOOKUP_ERROR, "database error looking up order"); } - god->unclaimed = (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) && !contract_available; + god->unclaimed = (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs) && + ! contract_available; if ( (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) && (NULL == god->contract_terms) ) { @@ -1050,9 +1076,8 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh, "Awaiting refund exceeding %s\n", TALER_amount2s (&god->sc.refund_expected)); if (god->sc.awaiting_refund_obtained) - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Awaiting pending refunds\n", - TALER_amount2s (&god->sc.refund_expected)); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Awaiting pending refunds\n"); suspend_god (god); return MHD_YES; } @@ -1085,10 +1110,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh, { struct KVC kvc[] = { { "order_summary", - // FIXME #6458: implement logic to extract summary based on - // language preferences from summary_i18n if present. - json_string_value (json_object_get (god->contract_terms, - "summary")) }, + get_order_summary (god) }, { "refund_amount", TALER_amount2s (&god->refund_amount) }, { "taler_refund_uri", @@ -1116,10 +1138,7 @@ TMH_get_orders_ID (const struct TMH_RequestHandler *rh, { struct KVC kvc[] = { { "order_summary", - // FIXME #6458: implement logic to extract summary based on - // language preferences from summary_i18n if present. - json_string_value (json_object_get (god->contract_terms, - "summary")) }, + get_order_summary (god) }, { "refund_amount", TALER_amount2s (&god->refund_amount) }, { "contract", -- cgit v1.2.3