-taler-exchange-httpd_reserves_close.c now builds (but not complete)

This commit is contained in:
Christian Grothoff 2022-10-02 12:41:37 +02:00
parent 4ea4f03aea
commit bd3741c1c1
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
4 changed files with 38 additions and 78 deletions

@ -1 +1 @@
Subproject commit b26070acff35f8ec68a299797d3de05ff5d234ac
Subproject commit 57d96e8e123df90c804a821874fc6cb88671ab75

View File

@ -161,6 +161,7 @@ taler_exchange_httpd_SOURCES = \
taler-exchange-httpd_recoup-refresh.c taler-exchange-httpd_recoup-refresh.h \
taler-exchange-httpd_refreshes_reveal.c taler-exchange-httpd_refreshes_reveal.h \
taler-exchange-httpd_refund.c taler-exchange-httpd_refund.h \
taler-exchange-httpd_reserves_close.c taler-exchange-httpd_reserves_close.h \
taler-exchange-httpd_reserves_get.c taler-exchange-httpd_reserves_get.h \
taler-exchange-httpd_reserves_history.c taler-exchange-httpd_reserves_history.h \
taler-exchange-httpd_reserves_open.c taler-exchange-httpd_reserves_open.h \

View File

@ -26,7 +26,7 @@
#include "taler_mhd_lib.h"
#include "taler_json_lib.h"
#include "taler_dbevents.h"
#include "taler-exchange-httpd_keys.h"
#include "taler-exchange-httpd_wire.h"
#include "taler-exchange-httpd_reserves_close.h"
#include "taler-exchange-httpd_responses.h"
@ -60,9 +60,9 @@ struct ReserveCloseContext
struct TALER_ReserveSignatureP reserve_sig;
/**
* Global fees applying to the request.
* Wire fees applying to the request.
*/
const struct TEH_GlobalFee *gf;
const struct TALER_WireFeeSet *wf;
/**
* Amount that will be wired (after closing fees).
@ -93,8 +93,6 @@ static MHD_RESULT
reply_reserve_close_success (struct MHD_Connection *connection,
const struct ReserveCloseContext *rhc)
{
const struct TALER_EXCHANGEDB_ReserveClose *rh = rhc->rh;
return TALER_MHD_REPLY_JSON_PACK (
connection,
MHD_HTTP_OK,
@ -128,10 +126,15 @@ reserve_close_transaction (void *cls,
struct TALER_Amount balance;
char *payto_uri;
#if FIXME
qs = TEH_plugin->get_reserve_balance (TEH_plugin->cls,
rcc->reserve_pub,
&balance,
&payto_uri);
#else
qs = GNUNET_DB_STATUS_HARD_ERROR;
payto_uri = NULL;
#endif
switch (qs)
{
case GNUNET_DB_STATUS_HARD_ERROR:
@ -146,11 +149,13 @@ reserve_close_transaction (void *cls,
return qs;
case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
*mhd_ret
= TALER_MHD_reply_with_error (rc->connection,
= TALER_MHD_reply_with_error (connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_EXCHANGE_GENERIC_RESERVE_UNKNOWN,
NULL);
return GNUNET_DB_STATUS_HARD_ERROR;
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
break;
}
if ( (NULL == rcc->payto_uri) &&
@ -159,7 +164,7 @@ reserve_close_transaction (void *cls,
*mhd_ret
= TALER_MHD_reply_with_error (connection,
MHD_HTTP_CONFLICT,
TALER_EC_RESERVE_CLOSE_NO_TARGET_ACCOUNT,
TALER_EC_EXCHANGE_RESERVES_CLOSE_NO_TARGET_ACCOUNT,
NULL);
return GNUNET_DB_STATUS_HARD_ERROR;
}
@ -177,7 +182,7 @@ reserve_close_transaction (void *cls,
and KYC not yet done (check KYC triggers!),
fail with 451 kyc required! */
*mhd_ret
= TEH_RESPONSE_reply_kyc_required (rcc->connection,
= TEH_RESPONSE_reply_kyc_required (connection,
&kyc_payto,
&kyc);
return GNUNET_DB_STATUS_HARD_ERROR;
@ -189,26 +194,30 @@ reserve_close_transaction (void *cls,
if (0 >
TALER_amount_subtract (&rcc->wire_amount,
&balance,
&rcc->gf->fees.close))
&rcc->wf->closing))
{
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Client attempted to close reserve with insufficient balance.\n");
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TEH_currency,
&rcc->wire_amount));
*mhd_ret = reply_reserve_close_success (rc->connection,
&rcc);
*mhd_ret = reply_reserve_close_success (connection,
rcc);
return GNUNET_DB_STATUS_HARD_ERROR;
}
{
#if FIXME
qs = TEH_plugin->insert_close_request (TEH_plugin->cls,
rcc->reserve_pub,
payto_uri,
&rcc->reserve_sig,
rcc->timestamp,
&rcc->gf->fees.close,
&rcc->wf->closing,
&rcc->wire_amount);
#else
qs = GNUNET_DB_STATUS_HARD_ERROR;
#endif
GNUNET_free (payto_uri);
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
{
@ -243,7 +252,7 @@ TEH_handler_reserves_close (struct TEH_RequestContext *rc,
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_timestamp ("request_timestamp",
&rcc.timestamp),
GNUNET_JSON_spec_allow_null (
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_string ("payto_uri",
&rcc.payto_uri),
NULL),
@ -286,32 +295,20 @@ TEH_handler_reserves_close (struct TEH_RequestContext *rc,
}
}
{
struct TEH_KeyStateHandle *keys;
keys = TEH_keys_get_state ();
if (NULL == keys)
{
GNUNET_break (0);
GNUNET_JSON_parse_free (spec);
return TALER_MHD_reply_with_error (rc->connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING,
NULL);
}
rcc.gf = TEH_keys_global_fee_by_time (keys,
rcc.timestamp);
}
if (NULL == rcc.gf)
// FIXME: can only do this later, as we may get the payto://-URI
// with the method from the database!
rcc.wf = TEH_wire_fees_by_time (rcc.timestamp,
"FIXME-method");
if (NULL == rcc.wf)
{
GNUNET_break (0);
return TALER_MHD_reply_with_error (rc->connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_EXCHANGE_GENERIC_BAD_CONFIGURATION,
NULL);
TALER_EC_EXCHANGE_WIRE_FEES_NOT_CONFIGURED,
"FIXME-method");
}
if (NULL != rcc.payto_uri)
TALER_payto_hash (&rcc.payto_uri,
TALER_payto_hash (rcc.payto_uri,
&rcc.h_payto);
if (GNUNET_OK !=
TALER_wallet_reserve_close_verify (rcc.timestamp,

View File

@ -163,51 +163,13 @@ reserve_open_transaction (void *cls,
(void) rsc;
#if 0
if (! TALER_amount_is_zero (&rsc->gf->fees.open))
{
bool balance_ok = false;
bool idempotent = true;
qs = TEH_plugin->insert_open_request (TEH_plugin->cls,
rsc->reserve_pub,
&rsc->reserve_sig,
rsc->timestamp,
&rsc->gf->fees.open,
&balance_ok,
&idempotent);
if (GNUNET_DB_STATUS_HARD_ERROR == qs)
{
GNUNET_break (0);
*mhd_ret
= TALER_MHD_reply_with_error (connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_FETCH_FAILED,
"get_reserve_open");
}
if (qs <= 0)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
return qs;
}
if (! balance_ok)
{
return TALER_MHD_reply_with_error (connection,
MHD_HTTP_CONFLICT,
TALER_EC_EXCHANGE_WITHDRAW_OPEN_ERROR_INSUFFICIENT_FUNDS,
NULL);
}
if (idempotent)
{
GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
"Idempotent /reserves/open request observed. Is caching working?\n");
}
}
qs = TEH_plugin->get_reserve_open (TEH_plugin->cls,
rsc->reserve_pub,
&rsc->balance,
&rsc->rh);
#endif
// FIXME: implement!
qs = TEH_plugin->do_reserve_open (TEH_plugin->cls,
rsc->reserve_pub,
...);
#else
qs = GNUNET_DB_STATUS_HARD_ERROR;
#endif
switch (qs)
{
case GNUNET_DB_STATUS_HARD_ERROR: