diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-01-16 14:45:53 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-01-16 14:45:53 +0100 |
commit | a0fffe7472300a291d576a9fbb14d7c107c05aff (patch) | |
tree | a5db7ad88f0e2534cf89056de4b865b1790991d1 | |
parent | 0b5bb420208bfb8b410eb84f7fbe4e7808468e9b (diff) | |
download | merchant-a0fffe7472300a291d576a9fbb14d7c107c05aff.tar.gz merchant-a0fffe7472300a291d576a9fbb14d7c107c05aff.tar.bz2 merchant-a0fffe7472300a291d576a9fbb14d7c107c05aff.zip |
convert amount from string in /proposal
-rw-r--r-- | src/backend/taler-merchant-httpd_proposal.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/backend/taler-merchant-httpd_proposal.c b/src/backend/taler-merchant-httpd_proposal.c index 31e3fb39..dcbe3d96 100644 --- a/src/backend/taler-merchant-httpd_proposal.c +++ b/src/backend/taler-merchant-httpd_proposal.c @@ -122,6 +122,31 @@ 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 * @@ -190,6 +215,12 @@ proposal_put (struct MHD_Connection *connection, json_string (buf)); } + if (GNUNET_OK != convert_amount (order, "amount")) + return TMH_RESPONSE_reply_arg_invalid (connection, + TALER_EC_PARAMETER_MALFORMED, + "amount"); + + /* Add timestamp if it doesn't exist */ if (NULL == json_object_get (order, "timestamp")) { |