summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <marcello.stanisci@inria.fr>2015-10-29 16:17:37 +0100
committerMarcello Stanisci <marcello.stanisci@inria.fr>2015-10-29 16:17:37 +0100
commit4a435a29de050d17ef5de531cc2e61a366998422 (patch)
tree61fa04955065fdaac47ee3be607153aa8223ae5e
parentbfcb32339fbed0513090b0f546b04c90c11ea474 (diff)
downloadmerchant-4a435a29de050d17ef5de531cc2e61a366998422.tar.gz
merchant-4a435a29de050d17ef5de531cc2e61a366998422.tar.bz2
merchant-4a435a29de050d17ef5de531cc2e61a366998422.zip
completing /contract REST call
-rw-r--r--configure.ac1
-rw-r--r--src/Makefile.am2
-rw-r--r--src/backend/taler-merchant-httpd_contract.c19
-rw-r--r--src/backend/taler-merchant-httpd_obsolete.c1
-rw-r--r--src/include/merchant.h4
-rw-r--r--src/tests/test_contract.c4
6 files changed, 21 insertions, 10 deletions
diff --git a/configure.ac b/configure.ac
index 55d1e196..67d84f11 100644
--- 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
index 9a5b5646..665be7d3 100644
--- 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
index e7278c7c..d28ad4ed 100644
--- 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
index ddbda549..a96dad59 100644
--- 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
index 04dd253d..0efd4388 100644
--- 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
index d086449d..147ea4f3 100644
--- 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;