diff options
author | Florian Dold <florian.dold@gmail.com> | 2018-01-22 13:45:16 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2018-01-22 13:45:16 +0100 |
commit | 01ad0c0faf6c79e20a7c3914f9b95f7aa351eb8f (patch) | |
tree | 45dbf74e7f8ab5918ed86fed725baacd2d1a920c | |
parent | 2a87fd92078b006a3707c2217a2898f86da95e0b (diff) | |
download | merchant-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.c | 37 |
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"); } |