diff options
author | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-08-20 00:49:02 -0400 |
---|---|---|
committer | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-08-20 00:49:02 -0400 |
commit | 8d172853c1c7b1ca8d9dc31194c4e73e79499a80 (patch) | |
tree | f07387eb4bfa9d0733107056242f7d85954b67cc /src | |
parent | b77ef665b0f3876f2c27db2d5a9b154fa1a9ba0d (diff) | |
download | merchant-8d172853c1c7b1ca8d9dc31194c4e73e79499a80.tar.gz merchant-8d172853c1c7b1ca8d9dc31194c4e73e79499a80.tar.bz2 merchant-8d172853c1c7b1ca8d9dc31194c4e73e79499a80.zip |
parse/test refund uri
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/taler-merchant-httpd_get-orders-ID.c | 2 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c | 2 | ||||
-rw-r--r-- | src/include/taler_merchant_service.h | 4 | ||||
-rw-r--r-- | src/lib/merchant_api_post_order_refund.c | 37 | ||||
-rw-r--r-- | src/testing/testing_api_cmd_refund_order.c | 41 |
5 files changed, 79 insertions, 7 deletions
diff --git a/src/backend/taler-merchant-httpd_get-orders-ID.c b/src/backend/taler-merchant-httpd_get-orders-ID.c index 142ba999..027f9f4d 100644 --- a/src/backend/taler-merchant-httpd_get-orders-ID.c +++ b/src/backend/taler-merchant-httpd_get-orders-ID.c @@ -265,6 +265,8 @@ make_taler_refund_uri (struct MHD_Connection *con, } GNUNET_buffer_write_path (&buf, order_id); + GNUNET_buffer_write_path (&buf, + ""); // Trailing slash return GNUNET_buffer_reap_str (&buf); } diff --git a/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c b/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c index 16f21d14..7d947d22 100644 --- a/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c +++ b/src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c @@ -85,6 +85,8 @@ make_taler_refund_uri (struct MHD_Connection *connection, GNUNET_buffer_write_path (&buf, instance_id); } GNUNET_buffer_write_path (&buf, order_id); + GNUNET_buffer_write_path (&buf, + ""); // Trailing slash return GNUNET_buffer_reap_str (&buf); } diff --git a/src/include/taler_merchant_service.h b/src/include/taler_merchant_service.h index 771cfbec..b0be501f 100644 --- a/src/include/taler_merchant_service.h +++ b/src/include/taler_merchant_service.h @@ -2352,11 +2352,13 @@ struct TALER_MERCHANT_OrderRefundHandle; * @param cls closure * @param http_status HTTP status code for this request * @param ec taler-specific error code + * @param taler_refund_uri the refund uri offered to the wallet */ typedef void (*TALER_MERCHANT_RefundCallback) ( void *cls, - const struct TALER_MERCHANT_HttpResponse *hr); + const struct TALER_MERCHANT_HttpResponse *hr, + const char *taler_refund_uri); /** diff --git a/src/lib/merchant_api_post_order_refund.c b/src/lib/merchant_api_post_order_refund.c index fb93864a..834aea5d 100644 --- a/src/lib/merchant_api_post_order_refund.c +++ b/src/lib/merchant_api_post_order_refund.c @@ -94,18 +94,44 @@ handle_refund_finished (void *cls, case 0: hr.ec = TALER_EC_INVALID_RESPONSE; orh->cb (orh->cb_cls, - &hr); + &hr, + NULL); break; case MHD_HTTP_OK: - orh->cb (orh->cb_cls, - &hr); + { + const char *taler_refund_uri; + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_string ("taler_refund_uri", + &taler_refund_uri), + GNUNET_JSON_spec_end () + }; + + if (GNUNET_OK != + GNUNET_JSON_parse (json, + spec, + NULL, NULL)) + { + GNUNET_break_op (0); + hr.http_status = 0; + hr.ec = TALER_EC_INVALID_RESPONSE; + orh->cb (orh->cb_cls, + &hr, + NULL); + break; + } + orh->cb (orh->cb_cls, + &hr, + taler_refund_uri); + GNUNET_JSON_parse_free (spec); + } break; case MHD_HTTP_CONFLICT: case MHD_HTTP_NOT_FOUND: hr.ec = TALER_JSON_get_error_code (json); hr.hint = TALER_JSON_get_error_hint (json); orh->cb (orh->cb_cls, - &hr); + &hr, + NULL); break; default: GNUNET_break_op (0); /* unexpected status code */ @@ -113,7 +139,8 @@ handle_refund_finished (void *cls, response_code, &hr); orh->cb (orh->cb_cls, - &hr); + &hr, + NULL); break; } TALER_MERCHANT_post_order_refund_cancel (orh); diff --git a/src/testing/testing_api_cmd_refund_order.c b/src/testing/testing_api_cmd_refund_order.c index ab6f78ac..bf8474dd 100644 --- a/src/testing/testing_api_cmd_refund_order.c +++ b/src/testing/testing_api_cmd_refund_order.c @@ -77,10 +77,12 @@ struct RefundState * * @param cls closure * @param hr HTTP response + * @param taler_refund_uri the refund uri offered to the wallet */ static void refund_cb (void *cls, - const struct TALER_MERCHANT_HttpResponse *hr) + const struct TALER_MERCHANT_HttpResponse *hr, + const char *taler_refund_uri) { struct RefundState *ris = cls; @@ -94,6 +96,43 @@ refund_cb (void *cls, (int) hr->ec); TALER_TESTING_FAIL (ris->is); } + switch (hr->http_status) + { + case MHD_HTTP_OK: + { + struct TALER_MERCHANT_RefundUriData rud; + + if (GNUNET_OK != + TALER_MERCHANT_parse_refund_uri (taler_refund_uri, + &rud)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Taler refund uri is malformed\n"); + TALER_TESTING_interpreter_fail (ris->is); + return; + } + + if ((0 != strcmp ("localhost:8080", + rud.merchant_host)) || + (NULL != rud.merchant_prefix_path) || + (0 != strcmp (ris->order_id, + rud.order_id)) || + (NULL != rud.ssid)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Taler refund uri does not match\n"); + TALER_TESTING_interpreter_fail (ris->is); + TALER_MERCHANT_parse_refund_uri_free (&rud); + return; + } + + TALER_MERCHANT_parse_refund_uri_free (&rud); + } + break; + default: + GNUNET_log (GNUNET_ERROR_TYPE_WARNING, + "Unhandled HTTP status.\n"); + } TALER_TESTING_interpreter_next (ris->is); } |