diff options
author | Christian Grothoff <christian@grothoff.org> | 2020-07-18 22:40:35 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-07-18 22:40:35 +0200 |
commit | bfb5ed3e84bf2479a6dc76e151b1ddffa2749e48 (patch) | |
tree | 03b8b40407f777c4ddb8947845dc10dc16270562 | |
parent | 02b21f6612f5150a686b6df0120fe3dd0722b58f (diff) |
towards implementing the /paid handler (DB interaction missing), for #5210
-rw-r--r-- | src/backend/Makefile.am | 2 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd.c | 1 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd_post-orders-ID-paid.c | 118 | ||||
-rw-r--r-- | src/backend/taler-merchant-httpd_post-orders-ID-paid.h | 40 |
4 files changed, 161 insertions, 0 deletions
diff --git a/src/backend/Makefile.am b/src/backend/Makefile.am index bb3f2bf9..27eaca19 100644 --- a/src/backend/Makefile.am +++ b/src/backend/Makefile.am @@ -83,6 +83,8 @@ taler_merchant_httpd_SOURCES = \ taler-merchant-httpd_post-orders-ID-claim.h \ taler-merchant-httpd_post-orders-ID-pay.c \ taler-merchant-httpd_post-orders-ID-pay.h \ + taler-merchant-httpd_post-orders-ID-paid.c \ + taler-merchant-httpd_post-orders-ID-paid.h \ taler-merchant-httpd_post-tips-ID-pickup.c \ taler-merchant-httpd_post-tips-ID-pickup.h \ taler-merchant-httpd_reserves.c \ diff --git a/src/backend/taler-merchant-httpd.c b/src/backend/taler-merchant-httpd.c index cbc7774b..1cf398e2 100644 --- a/src/backend/taler-merchant-httpd.c +++ b/src/backend/taler-merchant-httpd.c @@ -57,6 +57,7 @@ #include "taler-merchant-httpd_private-post-transfers.h" #include "taler-merchant-httpd_post-orders-ID-abort.h" #include "taler-merchant-httpd_post-orders-ID-claim.h" +#include "taler-merchant-httpd_post-orders-ID-paid.h" #include "taler-merchant-httpd_post-orders-ID-pay.h" #include "taler-merchant-httpd_post-tips-ID-pickup.h" #include "taler-merchant-httpd_reserves.h" diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-paid.c b/src/backend/taler-merchant-httpd_post-orders-ID-paid.c new file mode 100644 index 00000000..45f13c45 --- /dev/null +++ b/src/backend/taler-merchant-httpd_post-orders-ID-paid.c @@ -0,0 +1,118 @@ +/* + This file is part of TALER + (C) 2014-2020 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify + it under the terms of the GNU Affero 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, + see <http://www.gnu.org/licenses/> +*/ + +/** + * @file backend/taler-merchant-httpd_post-orders-ID-paid.c + * @brief handling of POST /orders/$ID/paid requests + * @author Christian Grothoff + */ +#include "platform.h" +#include <taler/taler_signatures.h> +#include <taler/taler_json_lib.h> +#include <taler/taler_exchange_service.h> +#include "taler-merchant-httpd_post-orders-ID-paid.h" + + +/** + * Process a proof of payment for a paid contract. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[in,out] hc context with further information about the request + * @return MHD result code + */ +MHD_RESULT +TMH_post_orders_ID_paid (const struct TMH_RequestHandler *rh, + struct MHD_Connection *connection, + struct TMH_HandlerContext *hc) +{ + struct PaymentResponsePS pr = { + .purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK), + .purpose.size = htonl (sizeof (pr)) + }; + struct TALER_MerchantSignatureP merchant_sig; + + { + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_fixed_auto ("h_contract_terms", + &pr.h_contract_terms), + GNUNET_JSON_spec_fixed_auto ("merchant_sig", + &merchant_sig), + GNUNET_JSON_spec_end () + }; + enum GNUNET_GenericReturnValue res; + + res = TALER_MHD_parse_json_data (connection, + hc->request_body, + spec); + if (GNUNET_YES != res) + { + GNUNET_break_op (0); + return (GNUNET_NO == res) + ? MHD_YES + : MHD_NO; + } + } + +#if FIXME + if (GNUNET_OK != + GNUNET_CRYPTO_eddsa_verify (TALER_SIGNATURE_MERCHANT_PAYMENT_OK, + &pr, + &merchant_sig.eddsa_sig, + &hc->instance->merchant_pub.eddsa_pub)) + { + GNUNET_break_op (0); + return TALER_MHD_reply_json_pack ( + connection, + MHD_HTTP_FORBIDDEN, + "{s:s, s:I}", + "hint", "deposit signature invalid", + "code", (json_int_t) TALER_EC_PAID_SIGNATURE_INVALID); + } + + // FIXME: check that h_contract_terms matches + // this order-id (and that the order is known) + if (0) + { + return TALER_MHD_reply_json_pack ( + connection, + MHD_HTTP_NOT_FOUND, + "{s:s, s:I}", + "hint", "order unknwown", + "code", (json_int_t) TALER_EC_PAID_ORDER_UNKNOWN); + } + if (0) + { + return TALER_MHD_reply_json_pack ( + connection, + MHD_HTTP_CONFLICT, + "{s:s, s:I}", + "hint", "contract hash does not match this order", + "code", (json_int_t) TALER_EC_PAID_CONTRACT_HASH_MISMATCH); + } +#endif + return TALER_MHD_reply_static (connection, + MHD_HTTP_NO_CONTENT, + NULL, + NULL, + 0); +} + + +/* end of taler-merchant-httpd_post-orders-ID-paid.c */ diff --git a/src/backend/taler-merchant-httpd_post-orders-ID-paid.h b/src/backend/taler-merchant-httpd_post-orders-ID-paid.h new file mode 100644 index 00000000..fc03b7d4 --- /dev/null +++ b/src/backend/taler-merchant-httpd_post-orders-ID-paid.h @@ -0,0 +1,40 @@ +/* + This file is part of TALER + (C) 2020 Taler Systems SA + + 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, see <http://www.gnu.org/licenses/> +*/ +/** + * @file backend/taler-merchant-httpd_post-orders-ID-paid.h + * @brief headers for POST /orders/$ID/paid handler + * @author Christian Grothoff + */ +#ifndef TALER_EXCHANGE_HTTPD_POST_ORDERS_ID_PAID_H +#define TALER_EXCHANGE_HTTPD_POST_ORDERS_ID_PAID_H +#include <microhttpd.h> +#include "taler-merchant-httpd.h" + + +/** + * Process proof of payment for a paid order. + * + * @param rh context of the handler + * @param connection the MHD connection to handle + * @param[in,out] hc context with further information about the request + * @return MHD result code + */ +MHD_RESULT +TMH_post_orders_ID_paid (const struct TMH_RequestHandler *rh, + struct MHD_Connection *connection, + struct TMH_HandlerContext *hc); + +#endif |