summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2020-08-20 00:49:02 -0400
committerJonathan Buchanan <jonathan.russ.buchanan@gmail.com>2020-08-20 00:49:02 -0400
commit8d172853c1c7b1ca8d9dc31194c4e73e79499a80 (patch)
treef07387eb4bfa9d0733107056242f7d85954b67cc /src
parentb77ef665b0f3876f2c27db2d5a9b154fa1a9ba0d (diff)
downloadmerchant-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.c2
-rw-r--r--src/backend/taler-merchant-httpd_private-post-orders-ID-refund.c2
-rw-r--r--src/include/taler_merchant_service.h4
-rw-r--r--src/lib/merchant_api_post_order_refund.c37
-rw-r--r--src/testing/testing_api_cmd_refund_order.c41
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);
}