diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/taler-merchant-httpd_post-orders-ID-claim.c | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-claim.c b/src/backend/taler-merchant-httpd_post-orders-ID-claim.c index e7d0c845..5c8fa540 100644 --- a/src/backend/taler-merchant-httpd_post-orders-ID-claim.c +++ b/src/backend/taler-merchant-httpd_post-orders-ID-claim.c @@ -158,6 +158,7 @@ TMH_post_orders_ID_claim (const struct TMH_RequestHandler *rh, const char *nonce; enum GNUNET_DB_QueryStatus qs; json_t *contract_terms; + struct TALER_ClaimTokenP claim_token; { struct GNUNET_JSON_Specification spec[] = { @@ -175,6 +176,30 @@ TMH_post_orders_ID_claim (const struct TMH_RequestHandler *rh, ? MHD_YES : MHD_NO; } + if (NULL != json_object_get (hc->request_body, + "token")) + { + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_fixed_auto ("token", + &claim_token), + GNUNET_JSON_spec_end () + }; + enum GNUNET_GenericReturnValue res; + + res = TALER_MHD_parse_json_data (connection, + hc->request_body, + spec); + if (GNUNET_OK != res) + return (GNUNET_NO == res) + ? MHD_YES + : MHD_NO; + } + else + { + memset (&claim_token, + 0, + sizeof (claim_token)); + } contract_terms = NULL; for (unsigned int i = 0; i<MAX_RETRIES; i++) { @@ -182,6 +207,7 @@ TMH_post_orders_ID_claim (const struct TMH_RequestHandler *rh, qs = claim_order (hc->instance->settings.id, order_id, nonce, + // &claim_token -- FIXME #6446: modify claim_order to include token in WHERE clause &contract_terms); if (GNUNET_DB_STATUS_SOFT_ERROR != qs) break; @@ -203,7 +229,7 @@ TMH_post_orders_ID_claim (const struct TMH_RequestHandler *rh, return TALER_MHD_reply_with_error (connection, MHD_HTTP_NOT_FOUND, TALER_EC_ORDERS_CLAIM_NOT_FOUND, - "unknown order id"); + "unknown order id (or invalid claim token)"); /* already claimed! */ json_decref (contract_terms); return TALER_MHD_reply_with_error (connection, |