diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_contract.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_contract.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/backend/taler-merchant-httpd_contract.c b/src/backend/taler-merchant-httpd_contract.c index e44d3b84..b351c620 100644 --- a/src/backend/taler-merchant-httpd_contract.c +++ b/src/backend/taler-merchant-httpd_contract.c @@ -52,6 +52,9 @@ MH_handler_contract (struct TMH_RequestHandler *rh, size_t *upload_data_size) { json_t *root; + json_t *jcontract; + json_t *pay_url; + json_t *exec_url; int res; struct TALER_ContractPS contract; struct GNUNET_CRYPTO_EddsaSignature contract_sig; @@ -67,18 +70,26 @@ MH_handler_contract (struct TMH_RequestHandler *rh, if ((GNUNET_NO == res) || (NULL == root)) return MHD_YES; - /* add fields to the "root" that the backend should provide */ - json_object_set (root, + jcontract = json_object_get (root, "contract"); + + if (NULL == jcontract) + { + return TMH_RESPONSE_reply_internal_error (connection, + "contract request malformed"); + } + + /* add fields to the contract that the backend should provide */ + json_object_set (jcontract, "mints", trusted_mints); - json_object_set (root, + json_object_set (jcontract, "auditors", j_auditors); - json_object_set_new (root, + json_object_set_new (jcontract, "H_wire", TALER_json_from_data (&h_wire, sizeof (h_wire))); - json_object_set_new (root, + json_object_set_new (jcontract, "merchant_pub", TALER_json_from_data (&pubkey, sizeof (pubkey))); @@ -91,11 +102,27 @@ MH_handler_contract (struct TMH_RequestHandler *rh, GNUNET_CRYPTO_eddsa_sign (privkey, &contract.purpose, &contract_sig); + + pay_url = json_object_get (root, "pay_url"); + if (NULL == pay_url) + { + return TMH_RESPONSE_reply_internal_error (connection, + "pay url missing"); + } + exec_url = json_object_get (root, "exec_url"); + if (NULL == exec_url) + { + return TMH_RESPONSE_reply_internal_error (connection, + "exec url missing"); + } + /* return final response */ return TMH_RESPONSE_reply_json_pack (connection, MHD_HTTP_OK, - "{s:o, s:o, s:o}", - "contract", root, + "{s:o, s:o, s:o, s:o, s:o}", + "contract", jcontract, + "exec_url", exec_url, + "pay_url", pay_url, "sig", TALER_json_from_data (&contract_sig, sizeof (contract_sig)), "H_contract", TALER_json_from_data (&contract.h_contract, |