summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-02-13 00:21:52 +0100
committerFlorian Dold <florian.dold@gmail.com>2017-02-13 00:21:52 +0100
commitd60d537dfc506590a1fc8c2872fe5a66097718c4 (patch)
tree6f8caea50a75458d2e0aadb3b550172f1d0408e4
parent30467b16b82f7cb1603268156d9edc1d6308b786 (diff)
downloadmerchant-d60d537dfc506590a1fc8c2872fe5a66097718c4.tar.gz
merchant-d60d537dfc506590a1fc8c2872fe5a66097718c4.tar.bz2
merchant-d60d537dfc506590a1fc8c2872fe5a66097718c4.zip
fix #4893
-rw-r--r--src/backend/taler-merchant-httpd_pay.c51
1 files changed, 32 insertions, 19 deletions
diff --git a/src/backend/taler-merchant-httpd_pay.c b/src/backend/taler-merchant-httpd_pay.c
index dc7766a1..f3be11ad 100644
--- a/src/backend/taler-merchant-httpd_pay.c
+++ b/src/backend/taler-merchant-httpd_pay.c
@@ -328,6 +328,36 @@ abort_deposit (struct PayContext *pc)
/**
+ * Generate a response that indicates payment success.
+ *
+ * @param pc payment context
+ * @return the mhd response
+ */
+struct MHD_Response *
+sign_success_response (struct PayContext *pc)
+{
+ struct GNUNET_CRYPTO_EddsaSignature sig;
+ struct PaymentResponsePS mr;
+
+ mr.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK);
+ mr.purpose.size = htonl (sizeof (mr));
+ mr.h_proposal_data = pc->h_proposal_data;
+
+ GNUNET_CRYPTO_eddsa_sign (&pc->mi->privkey.eddsa_priv,
+ &mr.purpose,
+ &sig);
+
+ return TMH_RESPONSE_make_json_pack ("{s:O, s:s, s:o}",
+ "proposal_data", pc->proposal_data,
+ "sig",
+ json_string_value (GNUNET_JSON_from_data_auto (&sig)),
+ "h_proposal_data",
+ GNUNET_JSON_from_data (&pc->h_proposal_data,
+ sizeof (struct GNUNET_HashCode)));
+}
+
+
+/**
* Callback to handle a deposit permission's response.
*
* @param cls a `struct DepositConfirmation` (i.e. a pointer
@@ -353,8 +383,6 @@ deposit_cb (void *cls,
{
struct DepositConfirmation *dc = cls;
struct PayContext *pc = dc->pc;
- struct GNUNET_CRYPTO_EddsaSignature sig;
- struct PaymentResponsePS mr;
dc->dh = NULL;
pc->pending--;
@@ -425,22 +453,7 @@ deposit_cb (void *cls,
return; /* still more to do */
- mr.purpose.purpose = htonl (TALER_SIGNATURE_MERCHANT_PAYMENT_OK);
- mr.purpose.size = htonl (sizeof (mr));
- mr.h_proposal_data = pc->h_proposal_data;
-
- GNUNET_CRYPTO_eddsa_sign (&pc->mi->privkey.eddsa_priv,
- &mr.purpose,
- &sig);
- resume_pay_with_response (pc,
- MHD_HTTP_OK,
- TMH_RESPONSE_make_json_pack ("{s:O, s:s, s:o}",
- "proposal_data", pc->proposal_data,
- "sig",
- json_string_value (GNUNET_JSON_from_data_auto (&sig)),
- "h_proposal_data",
- GNUNET_JSON_from_data (&pc->h_proposal_data,
- sizeof (struct GNUNET_HashCode))));
+ resume_pay_with_response (pc, MHD_HTTP_OK, sign_success_response (pc));
}
@@ -1151,7 +1164,7 @@ handler_pay_json (struct MHD_Connection *connection,
MHD_RESPMEM_PERSISTENT);
ret = MHD_queue_response (connection,
MHD_HTTP_OK,
- resp);
+ sign_success_response (pc));
MHD_destroy_response (resp);
return ret;
}