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:
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);