summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_contract.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/taler-merchant-httpd_contract.c')
-rw-r--r--src/backend/taler-merchant-httpd_contract.c62
1 files changed, 19 insertions, 43 deletions
diff --git a/src/backend/taler-merchant-httpd_contract.c b/src/backend/taler-merchant-httpd_contract.c
index 81bf3ed9..090682e7 100644
--- a/src/backend/taler-merchant-httpd_contract.c
+++ b/src/backend/taler-merchant-httpd_contract.c
@@ -1,6 +1,6 @@
/*
This file is part of TALER
- (C) 2014 Christian Grothoff (and other contributing authors)
+ (C) 2014, 2015 Christian Grothoff (and other contributing authors)
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
@@ -13,13 +13,11 @@
You should have received a copy of the GNU General Public License along with
TALER; see the file COPYING. If not, If not, see <http://www.gnu.org/licenses/>
*/
-
/**
- * @file merchant/backend/taler-merchant-httpd.c
+ * @file backend/taler-merchant-httpd_contract.c
* @brief HTTP serving layer mainly intended to communicate with the frontend
* @author Marcello Stanisci
*/
-
#include "platform.h"
#include <microhttpd.h>
#include <jansson.h>
@@ -31,6 +29,7 @@
#include <taler/taler_mint_service.h>
#include "taler-merchant-httpd.h"
#include "taler-merchant-httpd_parsing.h"
+#include "taler-merchant-httpd_auditors.h"
#include "taler-merchant-httpd_mints.h"
#include "taler-merchant-httpd_responses.h"
#include "taler_merchantdb_lib.h"
@@ -58,14 +57,10 @@ MH_handler_contract (struct TMH_RequestHandler *rh,
size_t *upload_data_size)
{
json_t *root;
- json_t *j_auditors;
- json_t *auditor;
int res;
- int cnt;
struct GNUNET_HashCode h_wire;
struct GNUNET_CRYPTO_EddsaPublicKey pubkey;
struct TALER_ContractPS contract;
- char *contract_str;
struct GNUNET_CRYPTO_EddsaSignature contract_sig;
res = TMH_PARSE_post_json (connection,
@@ -75,38 +70,17 @@ MH_handler_contract (struct TMH_RequestHandler *rh,
&root);
if (GNUNET_SYSERR == res)
return MHD_NO;
- /* the POST's body has to be further fetched */ if ((GNUNET_NO == res) || (NULL == root))
+ /* the POST's body has to be further fetched */
+ if ((GNUNET_NO == res) || (NULL == root))
return MHD_YES;
- /* Generate preferred mint(s) array. */
-
- j_auditors = json_array ();
- for (cnt = 0; cnt < nauditors; cnt++)
- {
- auditor = json_pack ("{s:s}",
- "name", auditors[cnt].name);
- json_array_append_new (j_auditors, auditor);
- }
-
- /**
- * Return badly if no mints are trusted (or no call to /keys has still
- * returned the expected data). WARNING: it
- * may be possible that a mint trusted by the wallet is good, but
- * still pending; that case must be handled with some "polling-style"
- * routine, simply ignored, or ended with an invitation to the wallet
- * to just retry later
- */
- if (! json_array_size (trusted_mints))
- return MHD_NO;
-
- /**
- * Hard error, no action can be taken by a wallet
- */
- if (! json_array_size (j_auditors))
- return MHD_NO;
- json_object_set_new (root, "mints", trusted_mints);
- json_object_set_new (root, "auditors", j_auditors);
+ json_object_set_new (root,
+ "mints",
+ trusted_mints);
+ json_object_set_new (root,
+ "auditors",
+ j_auditors);
json_object_set_new (root,
"H_wire",
@@ -118,21 +92,23 @@ MH_handler_contract (struct TMH_RequestHandler *rh,
"merchant_pub",
TALER_json_from_data (&pubkey, sizeof (pubkey)));
- /* Sign */
- contract_str = json_dumps (root, JSON_COMPACT | JSON_SORT_KEYS);
- GNUNET_CRYPTO_hash (contract_str, strlen (contract_str), &contract.h_contract);
+ GNUNET_assert (GNUNET_OK ==
+ TALER_hash_json (root,
+ &contract.h_contract));
contract.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_CONTRACT);
contract.purpose.size = htonl (sizeof (contract));
- GNUNET_CRYPTO_eddsa_sign (privkey, &contract.purpose, &contract_sig);
+ GNUNET_CRYPTO_eddsa_sign (privkey,
+ &contract.purpose,
+ &contract_sig);
return TMH_RESPONSE_reply_json_pack (connection,
MHD_HTTP_OK,
"{s:o, s:o, s:o}",
"contract", root,
"sig", TALER_json_from_data
- (&contract_sig, sizeof (contract_sig)),
+ (&contract_sig,
+ sizeof (contract_sig)),
"H_contract", TALER_json_from_data
(&contract.h_contract,
sizeof (contract.h_contract)));
-
}