merchant

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

commit 69eefa56d378058557dc53d67db448b12b70c081
parent f52a678fe66743ad10e64f8b6a04a19255ad79af
Author: Florian Dold <florian.dold@gmail.com>
Date:   Thu, 18 Jan 2018 00:57:10 +0100

convert refund amount if it is a string

Diffstat:
Msrc/backend/taler-merchant-httpd.c | 25+++++++++++++++++++++++++
Msrc/backend/taler-merchant-httpd.h | 12++++++++++++
Msrc/backend/taler-merchant-httpd_proposal.c | 27+--------------------------
Msrc/backend/taler-merchant-httpd_refund.c | 5+++++
4 files changed, 43 insertions(+), 26 deletions(-)

diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c @@ -1455,3 +1455,28 @@ TMH_make_absolute_backend_url (struct MHD_Connection *connection, return res; } + + +/** + * Convert an amount in a JSON object from the string amount format to the JSON + * amount format. Does nothing if the field is missing or already a JSON + * object. + * + * @param json json with the amount to convert + * @param field_name name of the field to convert + * @returns #GNUNET_OK on success, #GNUNET_SYSERR on invalid format + */ +int +TMH_convert_amount (json_t *json, char *field_name) +{ + if (! json_is_string (json_object_get (json, field_name))) + return GNUNET_OK; + const char *amount_str = json_string_value (json_object_get (json, field_name)); + GNUNET_assert (NULL != amount_str); + struct TALER_Amount amount; + if (GNUNET_OK != TALER_string_to_amount (amount_str, &amount)) + return GNUNET_SYSERR; + json_object_del (json, field_name); + json_object_set_new (json, field_name, TALER_JSON_from_amount (&amount)); + return GNUNET_OK; +} diff --git a/src/backend/taler-merchant-httpd.h b/src/backend/taler-merchant-httpd.h @@ -346,4 +346,16 @@ char * TMH_make_absolute_backend_url (struct MHD_Connection *connection, char *path, ...); +/** + * Convert an amount in a JSON object from the string amount format to the JSON + * amount format. Does nothing if the field is missing or already a JSON + * object. + * + * @param json json with the amount to convert + * @param field_name name of the field to convert + * @returns #GNUNET_OK on success, #GNUNET_SYSERR on invalid format + */ +int +TMH_convert_amount (json_t *json, char *field_name); + #endif diff --git a/src/backend/taler-merchant-httpd_proposal.c b/src/backend/taler-merchant-httpd_proposal.c @@ -122,31 +122,6 @@ json_parse_cleanup (struct TM_HandlerContext *hc) /** - * Convert an amount in a JSON object from the string amount format to the JSON - * amount format. Does nothing if the field is missing or already a JSON - * object. - * - * @param json json with the amount to convert - * @param field_name name of the field to convert - * @returns #GNUNET_OK on success, #GNUNET_SYSERR on invalid format - */ -static int -convert_amount (json_t *json, char *field_name) -{ - if (! json_is_string (json_object_get (json, field_name))) - return GNUNET_OK; - const char *amount_str = json_string_value (json_object_get (json, field_name)); - GNUNET_assert (NULL != amount_str); - struct TALER_Amount amount; - if (GNUNET_OK != TALER_string_to_amount (amount_str, &amount)) - return GNUNET_SYSERR; - json_object_del (json, field_name); - json_object_set_new (json, field_name, TALER_JSON_from_amount (&amount)); - return GNUNET_OK; -} - - -/** * Transform an order into a proposal and store it in the database. * Write the resulting proposal or an error message ot a MHD connection * @@ -216,7 +191,7 @@ proposal_put (struct MHD_Connection *connection, json_string (buf)); } - if (GNUNET_OK != convert_amount (order, "amount")) + if (GNUNET_OK != TMH_convert_amount (order, "amount")) return TMH_RESPONSE_reply_arg_invalid (connection, TALER_EC_PARAMETER_MALFORMED, "amount"); diff --git a/src/backend/taler-merchant-httpd_refund.c b/src/backend/taler-merchant-httpd_refund.c @@ -153,6 +153,11 @@ MH_handler_refund_increase (struct TMH_RequestHandler *rh, (NULL == root) ) return MHD_YES; + if (GNUNET_OK != TMH_convert_amount (root, "refund")) + return TMH_RESPONSE_reply_arg_invalid (connection, + TALER_EC_PARAMETER_MALFORMED, + "refund"); + res = TMH_PARSE_json_data (connection, root, spec);