From 7fd6be5cef06d0bd495f4e03d33c4d6f04c36131 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 17 Nov 2016 16:37:40 +0100 Subject: add idempotency checks for /refresh/reveal, fixing #4793 --- src/exchange/taler-exchange-httpd_db.c | 21 +++++++++++++++++---- src/exchange/taler-exchange-httpd_responses.c | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) (limited to 'src/exchange') diff --git a/src/exchange/taler-exchange-httpd_db.c b/src/exchange/taler-exchange-httpd_db.c index 2c6e90656..238112771 100644 --- a/src/exchange/taler-exchange-httpd_db.c +++ b/src/exchange/taler-exchange-httpd_db.c @@ -1280,16 +1280,28 @@ refresh_exchange_coin (struct MHD_Connection *connection, ev_sig.rsa_signature = NULL; return ev_sig; } + if (GNUNET_OK == + TEH_plugin->get_refresh_out (TEH_plugin->cls, + session, + session_hash, + coin_off, + &ev_sig)) + { + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Returning cashed reply for /refresh/reveal signature\n"); + return ev_sig; + } + ev_sig.rsa_signature - = GNUNET_CRYPTO_rsa_sign_blinded (dki->denom_priv.rsa_private_key, - commit_coin->coin_ev, - commit_coin->coin_ev_size); + = GNUNET_CRYPTO_rsa_sign_blinded (dki->denom_priv.rsa_private_key, + commit_coin->coin_ev, + commit_coin->coin_ev_size); if (NULL == ev_sig.rsa_signature) { GNUNET_break (0); return ev_sig; } - if (GNUNET_OK != + if (GNUNET_SYSERR == TEH_plugin->insert_refresh_out (TEH_plugin->cls, session, session_hash, @@ -1300,6 +1312,7 @@ refresh_exchange_coin (struct MHD_Connection *connection, GNUNET_CRYPTO_rsa_signature_free (ev_sig.rsa_signature); ev_sig.rsa_signature = NULL; } + return ev_sig; } diff --git a/src/exchange/taler-exchange-httpd_responses.c b/src/exchange/taler-exchange-httpd_responses.c index b31f22e10..2ecd3b4e5 100644 --- a/src/exchange/taler-exchange-httpd_responses.c +++ b/src/exchange/taler-exchange-httpd_responses.c @@ -318,7 +318,7 @@ TEH_RESPONSE_reply_internal_db_error (struct MHD_Connection *connection, { return TEH_RESPONSE_reply_internal_error (connection, ec, - "Failed to connect to database"); + "Failure in database interaction"); } -- cgit v1.2.3