diff --git a/src/exchange/taler-exchange-httpd_purses_deposit.h b/src/exchange/taler-exchange-httpd_purses_deposit.h new file mode 100644 index 000000000..fa587e977 --- /dev/null +++ b/src/exchange/taler-exchange-httpd_purses_deposit.h @@ -0,0 +1,47 @@ +/* + This file is part of TALER + Copyright (C) 2022 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, see +*/ +/** + * @file taler-exchange-httpd_purses_deposit.h + * @brief Handle /purses/$PID/deposit requests + * @author Christian Grothoff + */ +#ifndef TALER_EXCHANGE_HTTPD_PURSES_DEPOSIT_H +#define TALER_EXCHANGE_HTTPD_PURSES_DEPOSIT_H + +#include +#include +#include "taler-exchange-httpd.h" + + +/** + * Handle a "/purses/$PURSE_PUB/deposit" request. Parses the JSON, and, if + * successful, passes the JSON data to #deposit_transaction() to further check + * the details of the operation specified. If everything checks out, this + * will ultimately lead to the "purses deposit" being executed, or rejected. + * + * @param connection the MHD connection to handle + * @param purse_pub public key of the purse + * @param root uploaded JSON data + * @return MHD result code + */ +MHD_RESULT +TEH_handler_purses_deposit ( + struct MHD_Connection *connection, + const struct TALER_PurseContractPublicKeyP *purse_pub, + const json_t *root); + + +#endif diff --git a/src/exchange/taler-exchange-httpd_purses_get.c b/src/exchange/taler-exchange-httpd_purses_get.c new file mode 100644 index 000000000..799eeccbf --- /dev/null +++ b/src/exchange/taler-exchange-httpd_purses_get.c @@ -0,0 +1,91 @@ +/* + This file is part of TALER + Copyright (C) 2022 Taler Systems SA + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU Affero General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with + TALER; see the file COPYING. If not, see +*/ +/** + * @file taler-exchange-httpd_purses_get.c + * @brief Handle GET /purses/$PID requests + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include +#include +#include "taler_mhd_lib.h" +#include "taler-exchange-httpd_purses.h" +#include "taler-exchange-httpd_mhd.h" +#include "taler-exchange-httpd_responses.h" + +// FIXME: add long-polling support! + +MHD_RESULT +TEH_handler_pursess_get (struct TEH_RequestContext *rc, + const char *const args[1]) +{ + struct TALER_PurseContractPublicKeyP purse_pub; + enum GNUNET_DB_QueryStatus qs; + MHD_RESULT res; + struct GNUNET_TIME_Timestamp merge_timestamp = {0}; + + if (GNUNET_OK != + GNUNET_STRINGS_string_to_data (args[0], + strlen (args[0]), + &purse_pub, + sizeof (purse_pub))) + { + GNUNET_break_op (0); + return TALER_MHD_reply_with_error (rc->connection, + MHD_HTTP_BAD_REQUEST, + TALER_EC_EXCHANGE_PURSES_INVALID_PURSE_PUB, + args[0]); + } +#if FIXME + qs = TEH_plugin->select_purse (TEH_plugin->cls, + &purse_pub, + &merge_timestamp, + ...); + switch (qs) + { + case GNUNET_DB_STATUS_HARD_ERROR: + GNUNET_break (0); + return TALER_MHD_reply_with_error (rc->connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_GENERIC_DB_FETCH_FAILED, + "select_purses"); + case GNUNET_DB_STATUS_SOFT_ERROR: + GNUNET_break (0); + return TALER_MHD_reply_with_error (rc->connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_GENERIC_DB_FETCH_FAILED, + "select_purses"); + case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS: + return TALER_MHD_reply_with_error (rc->connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_EXCHANGE_PURSESS_UNKNOWN, + NULL); + case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT: + break; /* handled below */ + } +#endif + res = TALER_MHD_REPLY_JSON_PACK ( + rc->connection, + MHD_HTTP_OK, + GNUNET_JSON_pack_timestamp ("merge_timestamp", + &merge_timestamp)); + GNUNET_free (epurses); + return res; +} + + +/* end of taler-exchange-httpd_purses_get.c */