merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 4a435a29de050d17ef5de531cc2e61a366998422
parent bfcb32339fbed0513090b0f546b04c90c11ea474
Author: Marcello Stanisci <marcello.stanisci@inria.fr>
Date:   Thu, 29 Oct 2015 16:17:37 +0100

completing /contract REST call

Diffstat:
Mconfigure.ac | 1-
Msrc/Makefile.am | 2+-
Msrc/backend/taler-merchant-httpd_contract.c | 19+++++++++++++++++--
Msrc/backend/taler-merchant-httpd_obsolete.c | 1+
Msrc/include/merchant.h | 4++--
Msrc/tests/test_contract.c | 4----
6 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/configure.ac b/configure.ac @@ -180,7 +180,6 @@ AC_CHECK_FUNCS([strdup]) AC_CONFIG_FILES([Makefile src/Makefile src/include/Makefile -src/tests/Makefile src/backend/Makefile src/backend-lib/Makefile]) AC_OUTPUT diff --git a/src/Makefile.am b/src/Makefile.am @@ -1,2 +1,2 @@ AM_CPPFLAGS = -I$(top_srcdir)/src/include -SUBDIRS = include backend-lib backend tests +SUBDIRS = include backend-lib backend diff --git a/src/backend/taler-merchant-httpd_contract.c b/src/backend/taler-merchant-httpd_contract.c @@ -25,6 +25,7 @@ #include <jansson.h> #include <gnunet/gnunet_util_lib.h> #include <curl/curl.h> +#include <taler/taler_signatures.h> #include <taler/taler_amount_lib.h> #include <taler/taler_json_lib.h> #include <taler/taler_mint_service.h> @@ -73,6 +74,7 @@ MH_handler_contract (struct TMH_RequestHandler *rh, struct GNUNET_CRYPTO_EddsaPublicKey pubkey; struct MERCHANT_Contract contract; char *contract_str; + struct GNUNET_CRYPTO_EddsaSignature contract_sig; res = TMH_PARSE_post_json (connection, connection_cls, @@ -135,7 +137,20 @@ MH_handler_contract (struct TMH_RequestHandler *rh, TALER_json_from_data (&pubkey, sizeof (pubkey))); /* Sign */ - - return TMH_RESPONSE_reply_json (connection, root, MHD_HTTP_OK); + contract_str = json_dumps (root, JSON_COMPACT | JSON_SORT_KEYS); + GNUNET_CRYPTO_hash (contract_str, strlen (contract_str), &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); + + 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)), + "h_contract", TALER_json_from_data + (&contract.h_contract, + sizeof (contract.h_contract))); } diff --git a/src/backend/taler-merchant-httpd_obsolete.c b/src/backend/taler-merchant-httpd_obsolete.c @@ -25,6 +25,7 @@ #include <jansson.h> #include <gnunet/gnunet_util_lib.h> #include <curl/curl.h> +#include <taler/taler_signatures.h> #include <taler/taler_json_lib.h> #include <taler/taler_mint_service.h> #include "taler-mint-httpd_parsing.h" diff --git a/src/include/merchant.h b/src/include/merchant.h @@ -75,9 +75,9 @@ struct MERCHANT_Contract /** * Hash of the JSON contract in UTF-8 including 0-termination, - * using JSON_COMPACT encoding with sorted fields. + * using JSON_COMPACT | JSON_SORT_KEYS */ - struct GNUNET_HashCode h_contract_details; + struct GNUNET_HashCode h_contract; }; diff --git a/src/tests/test_contract.c b/src/tests/test_contract.c @@ -101,11 +101,7 @@ run (void *cls, char *const *args, const char *cfgfile, struct TALER_Amount amount; int64_t t_id; int64_t p_id; - #ifdef OBSOLETE - struct ContractNBO contract; - #else struct Contract contract; - #endif struct GNUNET_TIME_Absolute edate; struct GNUNET_TIME_Absolute now; uint64_t nounce;