summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_private-get-orders-ID.c
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2020-09-29 17:30:02 +0530
committerFlorian Dold <florian.dold@gmail.com>2020-09-29 18:32:44 +0530
commitfc51e020796e4faa5435520adb5e3ca67ee6105f (patch)
treed5c12b20989e82f355abd893c739ea09cd680efa /src/backend/taler-merchant-httpd_private-get-orders-ID.c
parent4e099d5fc559795715b8a4e038a05e675fc4e9f8 (diff)
downloadmerchant-fc51e020796e4faa5435520adb5e3ca67ee6105f.tar.gz
merchant-fc51e020796e4faa5435520adb5e3ca67ee6105f.tar.bz2
merchant-fc51e020796e4faa5435520adb5e3ca67ee6105f.zip
generate working order_status_url in private API
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-get-orders-ID.c')
-rw-r--r--src/backend/taler-merchant-httpd_private-get-orders-ID.c54
1 files changed, 40 insertions, 14 deletions
diff --git a/src/backend/taler-merchant-httpd_private-get-orders-ID.c b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
index 1f47a475..d95f43d7 100644
--- a/src/backend/taler-merchant-httpd_private-get-orders-ID.c
+++ b/src/backend/taler-merchant-httpd_private-get-orders-ID.c
@@ -834,15 +834,6 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler *rh,
&gorc->order_serial);
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
{
- struct GNUNET_HashCode unused;
-
- /* We don't have contract terms, but the order may still exist. */
- qs = TMH_db->lookup_order (TMH_db->cls,
- hc->instance->settings.id,
- hc->infix,
- &claim_token,
- &unused,
- &gorc->contract_terms);
order_only = true;
}
if (0 > qs)
@@ -857,12 +848,47 @@ TMH_private_get_orders_ID (const struct TMH_RequestHandler *rh,
TALER_EC_GET_ORDERS_DB_FETCH_CONTRACT_TERMS_ERROR,
NULL);
}
- if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs)
+
{
- return TALER_MHD_reply_with_error (connection,
- MHD_HTTP_NOT_FOUND,
- TALER_EC_GET_ORDERS_ORDER_NOT_FOUND,
- hc->infix);
+ struct GNUNET_HashCode unused;
+ json_t *ct = NULL;
+
+ /* We need the order for two cases: Either when the contract doesn't exist yet,
+ * or when the order is claimed but unpaid, and we need the claim token. */
+ qs = TMH_db->lookup_order (TMH_db->cls,
+ hc->instance->settings.id,
+ hc->infix,
+ &claim_token,
+ &unused,
+ &ct);
+
+ 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 TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GET_ORDERS_DB_FETCH_CONTRACT_TERMS_ERROR,
+ NULL);
+ }
+ if (order_only && (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS == qs) )
+ {
+ return TALER_MHD_reply_with_error (connection,
+ MHD_HTTP_NOT_FOUND,
+ TALER_EC_GET_ORDERS_ORDER_NOT_FOUND,
+ hc->infix);
+ }
+ if (order_only)
+ {
+ gorc->contract_terms = ct;
+ }
+ else if (NULL != ct)
+ {
+ json_decref (ct);
+ }
}
/* extract the fulfillment URL and total amount from the contract terms! */
{