summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-01-16 14:45:53 +0100
committerFlorian Dold <florian.dold@gmail.com>2018-01-16 14:45:53 +0100
commita0fffe7472300a291d576a9fbb14d7c107c05aff (patch)
treea5db7ad88f0e2534cf89056de4b865b1790991d1
parent0b5bb420208bfb8b410eb84f7fbe4e7808468e9b (diff)
downloadmerchant-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.c31
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"))
{