summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-01-22 13:45:16 +0100
committerFlorian Dold <florian.dold@gmail.com>2018-01-22 13:45:16 +0100
commit01ad0c0faf6c79e20a7c3914f9b95f7aa351eb8f (patch)
tree45dbf74e7f8ab5918ed86fed725baacd2d1a920c
parent2a87fd92078b006a3707c2217a2898f86da95e0b (diff)
downloadmerchant-01ad0c0faf6c79e20a7c3914f9b95f7aa351eb8f.tar.gz
merchant-01ad0c0faf6c79e20a7c3914f9b95f7aa351eb8f.tar.bz2
merchant-01ad0c0faf6c79e20a7c3914f9b95f7aa351eb8f.zip
fix check-payment logic without session_id, use proper error codes
-rw-r--r--src/backend/taler-merchant-httpd_check-payment.c37
1 files changed, 29 insertions, 8 deletions
diff --git a/src/backend/taler-merchant-httpd_check-payment.c b/src/backend/taler-merchant-httpd_check-payment.c
index 57eda8e8..133471e2 100644
--- a/src/backend/taler-merchant-httpd_check-payment.c
+++ b/src/backend/taler-merchant-httpd_check-payment.c
@@ -120,7 +120,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
mi = TMH_lookup_instance (instance_str);
if (NULL == mi)
return TMH_RESPONSE_reply_bad_request (connection,
- TALER_EC_PAY_INSTANCE_UNKNOWN,
+ TALER_EC_CHECK_PAYMENT_INSTANCE_UNKNOWN,
"merchant instance unknown");
if (NULL == order_id)
@@ -185,6 +185,8 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
GNUNET_assert (NULL != order_id);
+
+
qs = db->find_contract_terms (db->cls,
&contract_terms,
order_id,
@@ -197,15 +199,34 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
/* Always report on hard error as well to enable diagnostics */
GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
return TMH_RESPONSE_reply_internal_error (connection,
- TALER_EC_PAY_DB_FETCH_PAY_ERROR,
- "db error to previous /pay data");
-
+ TALER_EC_CHECK_PAYMENT_DB_FETCH_CONTRACT_TERMS_ERROR,
+ "db error fetching contract terms");
}
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
- return TMH_RESPONSE_reply_not_found (connection,
- TALER_EC_PAY_DB_STORE_PAY_ERROR,
- "Proposal not found");
+ qs = db->find_orders (db->cls,
+ &contract_terms,
+ order_id,
+ &mi->pubkey);
+ if (0 > qs)
+ {
+ /* single, read-only SQL statements should never cause
+ serialization problems */
+ GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR != qs);
+ /* Always report on hard error as well to enable diagnostics */
+ GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs);
+ return TMH_RESPONSE_reply_internal_error (connection,
+ TALER_EC_CHECK_PAYMENT_DB_FETCH_ORDER_ERROR,
+ "db error fetching order");
+ }
+ if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+ {
+ return TMH_RESPONSE_reply_not_found (connection,
+ TALER_EC_CHECK_PAYMENT_ORDER_ID_UNKNOWN,
+ "unknown order id");
+ }
+ /* Offer was not picked up yet, but we ensured that it exists */
+ goto do_pay;
}
if (GNUNET_OK !=
@@ -214,7 +235,7 @@ MH_handler_check_payment (struct TMH_RequestHandler *rh,
{
GNUNET_break (0);
return TMH_RESPONSE_reply_internal_error (connection,
- TALER_EC_PAY_FAILED_COMPUTE_PROPOSAL_HASH,
+ TALER_EC_CHECK_PAYMENT_FAILED_COMPUTE_PROPOSAL_HASH,
"Failed to hash proposal");
}