diff options
author | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-07-29 02:23:55 -0400 |
---|---|---|
committer | Jonathan Buchanan <jonathan.russ.buchanan@gmail.com> | 2020-07-29 02:23:55 -0400 |
commit | cf42868740b7481d2ebaac4ca0a152fbd9e97a95 (patch) | |
tree | 7f93bae2e493ab536d8ad3346375a4e7c476c84c /src/lib | |
parent | 9755a40ef68b78039293c8505fb0910d42affa4e (diff) | |
download | merchant-cf42868740b7481d2ebaac4ca0a152fbd9e97a95.tar.gz merchant-cf42868740b7481d2ebaac4ca0a152fbd9e97a95.tar.bz2 merchant-cf42868740b7481d2ebaac4ca0a152fbd9e97a95.zip |
lib code/tests for claim token
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/merchant_api_post_order_claim.c | 17 | ||||
-rw-r--r-- | src/lib/merchant_api_post_orders.c | 31 |
2 files changed, 42 insertions, 6 deletions
diff --git a/src/lib/merchant_api_post_order_claim.c b/src/lib/merchant_api_post_order_claim.c index 08e4f771..5ec2e243 100644 --- a/src/lib/merchant_api_post_order_claim.c +++ b/src/lib/merchant_api_post_order_claim.c @@ -166,13 +166,16 @@ handle_post_order_claim_finished (void *cls, /** - * Calls the GET /proposal API at the backend. That is, - * retrieve a proposal data by providing its transaction id. + * Calls the POST /orders/$ID/claim API at the backend. That is, + * retrieve the final contract terms including the client nonce. + * + * This is a PUBLIC API for wallets. * * @param ctx execution context * @param backend_url base URL of the merchant backend * @param order_id order id used to perform the lookup - * @param nonce nonce used to perform the lookup + * @param nonce nonce to use to claim the proposal + * @param claim_token the token used to verify the claim * @param cb callback which will work the response gotten from the backend * @param cb_cls closure to pass to @a cb * @return handle for this handle, NULL upon errors @@ -182,6 +185,7 @@ TALER_MERCHANT_order_claim (struct GNUNET_CURL_Context *ctx, const char *backend_url, const char *order_id, const struct GNUNET_CRYPTO_EddsaPublicKey *nonce, + const struct TALER_ClaimTokenP *claim_token, TALER_MERCHANT_OrderClaimCallback cb, void *cb_cls) { @@ -196,6 +200,13 @@ TALER_MERCHANT_order_claim (struct GNUNET_CURL_Context *ctx, GNUNET_break (0); return NULL; } + if (NULL != claim_token) + { + GNUNET_assert (0 == + json_object_set_new (req_obj, + "token", + GNUNET_JSON_from_data_auto (claim_token))); + } och = GNUNET_new (struct TALER_MERCHANT_OrderClaimHandle); och->ctx = ctx; och->cb = cb; diff --git a/src/lib/merchant_api_post_orders.c b/src/lib/merchant_api_post_orders.c index f1617aa2..1dafeb7f 100644 --- a/src/lib/merchant_api_post_orders.c +++ b/src/lib/merchant_api_post_orders.c @@ -87,14 +87,23 @@ handle_post_order_finished (void *cls, { struct TALER_MERCHANT_PostOrdersOperation *po = cls; const char *order_id = NULL; + struct TALER_ClaimTokenP token; const json_t *json = response; struct TALER_MERCHANT_HttpResponse hr = { .http_status = (unsigned int) response_code, .reply = json }; + bool has_token = ((NULL != json_object_get (json, + "token")) && + (false == json_is_null (json_object_get (json, + "token")))); struct GNUNET_JSON_Specification spec[] = { GNUNET_JSON_spec_string ("order_id", &order_id), + (!has_token) ? + GNUNET_JSON_spec_end () : + GNUNET_JSON_spec_fixed_auto ("token", + &token), GNUNET_JSON_spec_end () }; @@ -161,9 +170,15 @@ handle_post_order_finished (void *cls, GNUNET_break_op (0); break; } - po->cb (po->cb_cls, - &hr, - order_id); + { + const struct TALER_ClaimTokenP *token_ptr = &token; + if (!has_token) + token_ptr = NULL; + po->cb (po->cb_cls, + &hr, + order_id, + token_ptr); + } if (MHD_HTTP_OK == response_code) GNUNET_JSON_parse_free (spec); TALER_MERCHANT_orders_post_cancel (po); @@ -201,6 +216,7 @@ TALER_MERCHANT_orders_post (struct GNUNET_CURL_Context *ctx, NULL, 0, NULL, + true, cb, cb_cls); } @@ -220,6 +236,7 @@ TALER_MERCHANT_orders_post (struct GNUNET_CURL_Context *ctx, * @param inventory_products products to add to the order from the inventory * @param lock_uuids_length length of the @a uuids array * @param uuids array of UUIDs with locks on @a inventory_products + * @param create_token whether to create a claim token * @param cb the callback to call when a reply for this request is available * @param cb_cls closure for @a cb * @return a handle for this request, NULL on error @@ -235,6 +252,7 @@ TALER_MERCHANT_orders_post2 ( const struct TALER_MERCHANT_InventoryProduct inventory_products[], unsigned int uuids_length, const struct GNUNET_Uuid uuids[], + bool create_token, TALER_MERCHANT_PostOrdersCallback cb, void *cb_cls) { @@ -316,6 +334,13 @@ TALER_MERCHANT_orders_post2 ( "lock_uuids", ua)); } + if (true != create_token) + { + GNUNET_assert (0 == + json_object_set_new (req, + "create_token", + json_boolean (create_token))); + } eh = curl_easy_init (); GNUNET_assert (NULL != eh); if (GNUNET_OK != TALER_curl_easy_post (&po->post_ctx, |