summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcello Stanisci <marcello.stanisci@inria.fr>2016-02-16 20:33:43 +0100
committerMarcello Stanisci <marcello.stanisci@inria.fr>2016-02-16 20:33:43 +0100
commitaee31d8c2185bb0e1a342e93e04f929a2f2f4943 (patch)
tree4f147e546fb34081b801ec00c7c5b3f9112f7287
parent1c06959150fe255075584e92af60b9f8d523c629 (diff)
downloadmerchant-aee31d8c2185bb0e1a342e93e04f929a2f2f4943.tar.gz
merchant-aee31d8c2185bb0e1a342e93e04f929a2f2f4943.tar.bz2
merchant-aee31d8c2185bb0e1a342e93e04f929a2f2f4943.zip
adding /hash-contract feature
-rw-r--r--src/backend/Makefile.am3
-rw-r--r--src/backend/taler-merchant-httpd.c8
-rw-r--r--src/backend/taler-merchant-httpd_util.c87
-rw-r--r--src/backend/taler-merchant-httpd_util.h43
4 files changed, 139 insertions, 2 deletions
diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am
index 24e4e166..8686fdef 100644
--- a/src/backend/Makefile.am
+++ b/src/backend/Makefile.am
@@ -12,7 +12,8 @@ taler_merchant_httpd_SOURCES = \
taler-merchant-httpd_auditors.c taler-merchant-httpd_auditors.h \
taler-merchant-httpd_mints.c taler-merchant-httpd_mints.h \
taler-merchant-httpd_contract.c taler-merchant-httpd_contract.h \
- taler-merchant-httpd_pay.c taler-merchant-httpd_pay.h
+ taler-merchant-httpd_pay.c taler-merchant-httpd_pay.h \
+ taler-merchant-httpd_util.c taler-merchant-httpd_util.h
taler_merchant_httpd_LDADD = \
$(top_srcdir)/src/backenddb/libtalermerchantdb.la \
diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c
index 01a00fdb..9e0c7ac9 100644
--- a/src/backend/taler-merchant-httpd.c
+++ b/src/backend/taler-merchant-httpd.c
@@ -35,6 +35,7 @@
#include "taler-merchant-httpd_mints.h"
#include "taler-merchant-httpd_contract.h"
#include "taler-merchant-httpd_pay.h"
+#include "taler-merchant-httpd_util.h"
@@ -170,7 +171,12 @@ url_handler (void *cls,
{ "/", MHD_HTTP_METHOD_GET, "text/plain",
"Hello, I'm a merchant's Taler backend. This HTTP server is not for humans.\n", 0,
&TMH_MHD_handler_static_response, MHD_HTTP_OK },
-
+ { "/hash-contract", MHD_HTTP_METHOD_POST, "application/json",
+ NULL, 0,
+ &MH_handler_hash_contract, MHD_HTTP_OK },
+ { "/hash-contract", NULL, "text/plain",
+ "Only POST is allowed", 0,
+ &TMH_MHD_handler_send_json_pack_error, MHD_HTTP_METHOD_NOT_ALLOWED },
{ "/contract", MHD_HTTP_METHOD_POST, "application/json",
NULL, 0,
&MH_handler_contract, MHD_HTTP_OK },
diff --git a/src/backend/taler-merchant-httpd_util.c b/src/backend/taler-merchant-httpd_util.c
new file mode 100644
index 00000000..2b541823
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_util.c
@@ -0,0 +1,87 @@
+/*
+ This file is part of TALER
+ (C) 2014, 2015 GNUnet e.V.
+
+ 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
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ 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 backend/taler-merchant-httpd_contract.c
+ * @brief HTTP serving layer mainly intended to communicate with the frontend
+ * @author Marcello Stanisci
+ */
+#include "platform.h"
+#include <jansson.h>
+#include <taler/taler_signatures.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"
+
+/**
+ * Hashes a plain JSON contract sending the result to the other end of
+ * HTTP communication
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+int
+MH_handler_hash_contract (struct TMH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size)
+{
+
+ json_t *root;
+ json_t *jcontract;
+ int res;
+ struct GNUNET_HashCode hc;
+
+ res = TMH_PARSE_post_json (connection,
+ connection_cls,
+ upload_data,
+ upload_data_size,
+ &root);
+
+ if (GNUNET_SYSERR == res)
+ return MHD_NO;
+ /* the POST's body has to be further fetched */
+ if ((GNUNET_NO == res) || (NULL == root))
+ return MHD_YES;
+
+ jcontract = json_object_get (root, "contract");
+
+ if (NULL == jcontract)
+ {
+ return TMH_RESPONSE_reply_internal_error (connection,
+ "missing 'contract' field");
+ }
+
+ GNUNET_assert (GNUNET_OK ==
+ TALER_hash_json (jcontract,
+ &hc));
+
+ /* return final response */
+ res = TMH_RESPONSE_reply_json_pack (connection,
+ MHD_HTTP_OK,
+ "{s:O}",
+ "hash", TALER_json_from_data (&hc,
+ sizeof (hc)));
+ json_decref (root);
+ return res;
+
+}
diff --git a/src/backend/taler-merchant-httpd_util.h b/src/backend/taler-merchant-httpd_util.h
new file mode 100644
index 00000000..ea6d3f09
--- /dev/null
+++ b/src/backend/taler-merchant-httpd_util.h
@@ -0,0 +1,43 @@
+/*
+ This file is part of TALER
+ (C) 2014, 2015 GNUnet e.V.
+
+ 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
+ Foundation; either version 3, or (at your option) any later version.
+
+ TALER is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ 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 backend/taler-merchant-httpd_contract.h
+ * @brief headers for /contract handler
+ * @author Marcello Stanisci
+ */
+#ifndef TALER_MINT_HTTPD_UTIL_H
+#define TALER_MINT_HTTPD_UTIL_H
+#include <microhttpd.h>
+#include "taler-merchant-httpd.h"
+
+/**
+ * Manage a contract request
+ *
+ * @param rh context of the handler
+ * @param connection the MHD connection to handle
+ * @param[in,out] connection_cls the connection's closure (can be updated)
+ * @param upload_data upload data
+ * @param[in,out] upload_data_size number of bytes (left) in @a upload_data
+ * @return MHD result code
+ */
+int
+MH_handler_hash_contract (struct TMH_RequestHandler *rh,
+ struct MHD_Connection *connection,
+ void **connection_cls,
+ const char *upload_data,
+ size_t *upload_data_size);
+
+#endif