From 493f8fdc92265f421878e805a4dc4ab5b9a6038d Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sat, 23 Sep 2023 11:10:09 +0200 Subject: update fakebank to match latest core bank API with 3 /withdrawals endpoints moved top-level --- src/bank-lib/Makefile.am | 6 +- src/bank-lib/fakebank_bank.c | 140 ++++++++++----------- .../fakebank_bank_get_accounts_withdrawals.c | 111 ---------------- .../fakebank_bank_get_accounts_withdrawals.h | 53 -------- src/bank-lib/fakebank_bank_get_withdrawals.c | 87 +++++++++++++ src/bank-lib/fakebank_bank_get_withdrawals.h | 51 ++++++++ ...fakebank_bank_post_accounts_withdrawals_abort.c | 97 -------------- ...fakebank_bank_post_accounts_withdrawals_abort.h | 50 -------- ...kebank_bank_post_accounts_withdrawals_confirm.c | 139 -------------------- ...kebank_bank_post_accounts_withdrawals_confirm.h | 50 -------- .../fakebank_bank_post_withdrawals_abort.c | 74 +++++++++++ .../fakebank_bank_post_withdrawals_abort.h | 48 +++++++ .../fakebank_bank_post_withdrawals_confirm.c | 115 +++++++++++++++++ .../fakebank_bank_post_withdrawals_confirm.h | 48 +++++++ 14 files changed, 492 insertions(+), 577 deletions(-) delete mode 100644 src/bank-lib/fakebank_bank_get_accounts_withdrawals.c delete mode 100644 src/bank-lib/fakebank_bank_get_accounts_withdrawals.h create mode 100644 src/bank-lib/fakebank_bank_get_withdrawals.c create mode 100644 src/bank-lib/fakebank_bank_get_withdrawals.h delete mode 100644 src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.c delete mode 100644 src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.h delete mode 100644 src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.c delete mode 100644 src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.h create mode 100644 src/bank-lib/fakebank_bank_post_withdrawals_abort.c create mode 100644 src/bank-lib/fakebank_bank_post_withdrawals_abort.h create mode 100644 src/bank-lib/fakebank_bank_post_withdrawals_confirm.c create mode 100644 src/bank-lib/fakebank_bank_post_withdrawals_confirm.h diff --git a/src/bank-lib/Makefile.am b/src/bank-lib/Makefile.am index 783ed825c..3458b7a01 100644 --- a/src/bank-lib/Makefile.am +++ b/src/bank-lib/Makefile.am @@ -69,11 +69,11 @@ libtalerfakebank_la_SOURCES = \ fakebank_bank.c fakebank_bank.h \ fakebank_bank_accounts_withdrawals.c fakebank_bank_accounts_withdrawals.h \ fakebank_bank_get_accounts.c fakebank_bank_get_accounts.h \ - fakebank_bank_get_accounts_withdrawals.c fakebank_bank_get_accounts_withdrawals.h \ + fakebank_bank_get_withdrawals.c fakebank_bank_get_withdrawals.h \ fakebank_bank_get_root.c fakebank_bank_get_root.h \ fakebank_bank_post_accounts_withdrawals.c fakebank_bank_post_accounts_withdrawals.h \ - fakebank_bank_post_accounts_withdrawals_abort.c fakebank_bank_post_accounts_withdrawals_abort.h \ - fakebank_bank_post_accounts_withdrawals_confirm.c fakebank_bank_post_accounts_withdrawals_confirm.h \ + fakebank_bank_post_withdrawals_abort.c fakebank_bank_post_withdrawals_abort.h \ + fakebank_bank_post_withdrawals_confirm.c fakebank_bank_post_withdrawals_confirm.h \ fakebank_bank_testing_register.c fakebank_bank_testing_register.h \ fakebank_tbr.c fakebank_tbr.h \ fakebank_tbr_get_history.c fakebank_tbr_get_history.h \ diff --git a/src/bank-lib/fakebank_bank.c b/src/bank-lib/fakebank_bank.c index 8c3c48d10..ec7862ac7 100644 --- a/src/bank-lib/fakebank_bank.c +++ b/src/bank-lib/fakebank_bank.c @@ -31,11 +31,11 @@ #include "fakebank_tbr.h" #include "fakebank_twg.h" #include "fakebank_bank_get_accounts.h" -#include "fakebank_bank_get_accounts_withdrawals.h" +#include "fakebank_bank_get_withdrawals.h" #include "fakebank_bank_get_root.h" #include "fakebank_bank_post_accounts_withdrawals.h" -#include "fakebank_bank_post_accounts_withdrawals_abort.h" -#include "fakebank_bank_post_accounts_withdrawals_confirm.h" +#include "fakebank_bank_post_withdrawals_abort.h" +#include "fakebank_bank_post_withdrawals_confirm.h" #include "fakebank_bank_testing_register.h" @@ -149,6 +149,69 @@ TALER_FAKEBANK_bank_main_ ( url); } + if ( (0 == strncmp (url, + "/withdrawals/", + strlen ("/withdrawals/"))) && + (0 == strcasecmp (method, + MHD_HTTP_METHOD_GET)) ) + { + /* GET /withdrawals/$WID */ + const char *wid; + + wid = &url[strlen ("/withdrawals/")]; + return TALER_FAKEBANK_bank_get_withdrawals_ (h, + connection, + wid); + } + + if ( (0 == strncmp (url, + "/withdrawals/", + strlen ("/withdrawals/"))) && + (0 == strcasecmp (method, + MHD_HTTP_METHOD_POST)) ) + { + /* POST /withdrawals/$WID* */ + const char *wid = url + strlen ("/withdrawals/"); + const char *opid = strchr (wid, + '/'); + char *wi; + + if (NULL == opid) + { + /* POST /withdrawals/$WID (not defined) */ + GNUNET_break_op (0); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_GENERIC_ENDPOINT_UNKNOWN, + url); + } + wi = GNUNET_strndup (wid, + opid - wid); + if (0 == strcmp (opid, + "/abort")) + { + /* POST /withdrawals/$WID/abort */ + MHD_RESULT ret; + + ret = TALER_FAKEBANK_bank_withdrawals_abort_ (h, + connection, + wi); + GNUNET_free (wi); + return ret; + } + if (0 == strcmp (opid, + "/confirm")) + { + /* POST /withdrawals/$WID/confirm */ + MHD_RESULT ret; + + ret = TALER_FAKEBANK_bank_withdrawals_confirm_ (h, + connection, + wi); + GNUNET_free (wi); + return ret; + } + } if (0 == strncmp (url, "/accounts/", @@ -297,25 +360,6 @@ TALER_FAKEBANK_bank_main_ ( TALER_EC_GENERIC_CLIENT_INTERNAL_ERROR, url); } - if (0 == strncmp (end_acc, - "/withdrawals/", - strlen ("/withdrawals/"))) - { - /* GET /accounts/$ACCOUNT/withdrawals/$WID */ - const char *wid; - char *acc; - MHD_RESULT ret; - - acc = GNUNET_strndup (acc_name, - end_acc - acc_name); - wid = &end_acc[strlen ("/withdrawals/")]; - ret = TALER_FAKEBANK_bank_get_accounts_withdrawals_ (h, - connection, - acc, - wid); - GNUNET_free (acc); - return ret; - } if (0 == strcmp (end_acc, "/cashouts")) { @@ -433,58 +477,6 @@ TALER_FAKEBANK_bank_main_ ( GNUNET_free (acc); return ret; } - - if (0 == strncmp (end_acc, - "/withdrawals/", - strlen ("/withdrawals/"))) - { - /* POST /accounts/$ACCOUNT/withdrawals/$WID* */ - const char *wid = end_acc + strlen ("/withdrawals/"); - const char *opid = strchr (wid, - '/'); - char *wi; - - if (NULL == opid) - { - /* POST /accounts/$ACCOUNT/withdrawals/$WID (not defined) */ - GNUNET_break_op (0); - GNUNET_free (acc); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_GENERIC_ENDPOINT_UNKNOWN, - acc_name); - } - wi = GNUNET_strndup (wid, - opid - wid); - if (0 == strcmp (opid, - "/abort")) - { - /* POST /accounts/$ACCOUNT/withdrawals/$WID/abort */ - MHD_RESULT ret; - - ret = TALER_FAKEBANK_bank_withdrawals_abort_ (h, - connection, - acc, - wi); - GNUNET_free (wi); - GNUNET_free (acc); - return ret; - } - if (0 == strcmp (opid, - "/confirm")) - { - /* POST /accounts/$ACCOUNT/withdrawals/$WID/confirm */ - MHD_RESULT ret; - - ret = TALER_FAKEBANK_bank_withdrawals_confirm_ (h, - connection, - acc, - wi); - GNUNET_free (wi); - GNUNET_free (acc); - return ret; - } - } } } diff --git a/src/bank-lib/fakebank_bank_get_accounts_withdrawals.c b/src/bank-lib/fakebank_bank_get_accounts_withdrawals.c deleted file mode 100644 index 176b6fb42..000000000 --- a/src/bank-lib/fakebank_bank_get_accounts_withdrawals.c +++ /dev/null @@ -1,111 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - TALER is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see -*/ -/** - * @file bank-lib/fakebank_bank_get_accounts_withdrawals.c - * @brief implements the Taler Bank API "GET /accounts/ACC/withdrawals/WID" handler - * @author Christian Grothoff - */ -#include "platform.h" -#include -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include -#include "fakebank.h" -#include "fakebank_bank_get_accounts_withdrawals.h" -#include "fakebank_common_lookup.h" - - -/** - * Handle GET /accounts/${account_name}/withdrawals/{withdrawal_id} request - * to the Taler bank access API. - * - * @param h the handle - * @param connection the connection - * @param account_name name of the account - * @param withdrawal_id withdrawal ID to return status of - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_get_accounts_withdrawals_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *account_name, - const char *withdrawal_id) -{ - struct WithdrawalOperation *wo; - struct Account *acc; - - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, - withdrawal_id); - if (NULL == wo) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - withdrawal_id); - } - acc = TALER_FAKEBANK_lookup_account_ (h, - account_name, - NULL); - if (NULL == acc) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_UNKNOWN_ACCOUNT, - account_name); - } - if (wo->debit_account != acc) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - account_name); - } - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_REPLY_JSON_PACK ( - connection, - MHD_HTTP_OK, - GNUNET_JSON_pack_bool ("aborted", - wo->aborted), - GNUNET_JSON_pack_bool ("selection_done", - wo->selection_done), - GNUNET_JSON_pack_bool ("transfer_done", - wo->confirmation_done), - GNUNET_JSON_pack_allow_null ( - GNUNET_JSON_pack_string ("selected_exchange_account", - wo->exchange_account->payto_uri)), - GNUNET_JSON_pack_allow_null ( - wo->selection_done - ? GNUNET_JSON_pack_data_auto ("selected_reserve_pub", - &wo->reserve_pub) - : GNUNET_JSON_pack_string ("selected_reserve_pub", - NULL)), - TALER_JSON_pack_amount ("amount", - &wo->amount)); -} diff --git a/src/bank-lib/fakebank_bank_get_accounts_withdrawals.h b/src/bank-lib/fakebank_bank_get_accounts_withdrawals.h deleted file mode 100644 index 53dd873ec..000000000 --- a/src/bank-lib/fakebank_bank_get_accounts_withdrawals.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - TALER is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see -*/ -/** - * @file bank-lib/fakebank_bank_get_accounts_withdrawals.h - * @brief implements the Taler Bank API "GET /accounts/ACC/withdrawals/WID" handler - * @author Christian Grothoff - */ -#ifndef FAKEBANK_BANK_GET_ACCOUNTS_WITHDRAWALS_H -#define FAKEBANK_BANK_GET_ACCOUNTS_WITHDRAWALS_H - -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include -#include "fakebank.h" -#include "fakebank_bank_get_accounts_withdrawals.h" - - -/** - * Handle GET /accounts/${account_name}/withdrawals/{withdrawal_id} request - * to the Taler bank access API. - * - * @param h the handle - * @param connection the connection - * @param account_name name of the account - * @param withdrawal_id withdrawal ID to return status of - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_get_accounts_withdrawals_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *account_name, - const char *withdrawal_id); - - -#endif diff --git a/src/bank-lib/fakebank_bank_get_withdrawals.c b/src/bank-lib/fakebank_bank_get_withdrawals.c new file mode 100644 index 000000000..7f65e8660 --- /dev/null +++ b/src/bank-lib/fakebank_bank_get_withdrawals.c @@ -0,0 +1,87 @@ +/* + This file is part of TALER + (C) 2016-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, + see +*/ +/** + * @file bank-lib/fakebank_bank_get_withdrawals.c + * @brief implements the Taler Bank API "GET /withdrawals/$WID" handler + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include +#include "fakebank.h" +#include "fakebank_bank_get_withdrawals.h" +#include "fakebank_common_lookup.h" + + +/** + * Handle GET /withdrawals/{withdrawal_id} request + * to the Taler bank access API. + * + * @param h the handle + * @param connection the connection + * @param withdrawal_id withdrawal ID to return status of + * @return MHD result code + */ +MHD_RESULT +TALER_FAKEBANK_bank_get_withdrawals_ ( + struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *withdrawal_id) +{ + struct WithdrawalOperation *wo; + + GNUNET_assert (0 == + pthread_mutex_lock (&h->big_lock)); + wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, + withdrawal_id); + if (NULL == wo) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_BANK_TRANSACTION_NOT_FOUND, + withdrawal_id); + } + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_REPLY_JSON_PACK ( + connection, + MHD_HTTP_OK, + GNUNET_JSON_pack_bool ("aborted", + wo->aborted), + GNUNET_JSON_pack_bool ("selection_done", + wo->selection_done), + GNUNET_JSON_pack_bool ("transfer_done", + wo->confirmation_done), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_string ("selected_exchange_account", + wo->exchange_account->payto_uri)), + GNUNET_JSON_pack_allow_null ( + wo->selection_done + ? GNUNET_JSON_pack_data_auto ("selected_reserve_pub", + &wo->reserve_pub) + : GNUNET_JSON_pack_string ("selected_reserve_pub", + NULL)), + TALER_JSON_pack_amount ("amount", + &wo->amount)); +} diff --git a/src/bank-lib/fakebank_bank_get_withdrawals.h b/src/bank-lib/fakebank_bank_get_withdrawals.h new file mode 100644 index 000000000..a753dcee8 --- /dev/null +++ b/src/bank-lib/fakebank_bank_get_withdrawals.h @@ -0,0 +1,51 @@ +/* + This file is part of TALER + (C) 2016-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, + see +*/ +/** + * @file bank-lib/fakebank_bank_get_accounts_withdrawals.h + * @brief implements the Taler Bank API "GET /accounts/ACC/withdrawals/WID" handler + * @author Christian Grothoff + */ +#ifndef FAKEBANK_BANK_GET_WITHDRAWALS_H +#define FAKEBANK_BANK_GET_WITHDRAWALS_H + +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include +#include "fakebank.h" +#include "fakebank_bank_get_withdrawals.h" + + +/** + * Handle GET /withdrawals/{withdrawal_id} request + * to the Taler bank access API. + * + * @param h the handle + * @param connection the connection + * @param withdrawal_id withdrawal ID to return status of + * @return MHD result code + */ +MHD_RESULT +TALER_FAKEBANK_bank_get_withdrawals_ ( + struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *withdrawal_id); + + +#endif diff --git a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.c b/src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.c deleted file mode 100644 index 4a252f9b8..000000000 --- a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.c +++ /dev/null @@ -1,97 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - TALER is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see -*/ -/** - * @file bank-lib/fakebank_bank_post_accounts_withdrawals_abort.c - * @brief implement bank API withdrawals /abort endpoint - * @author Christian Grothoff - */ -#include "platform.h" -#include -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include -#include "fakebank.h" -#include "fakebank_bank_post_accounts_withdrawals_abort.h" -#include "fakebank_common_lookup.h" -#include "fakebank_common_lp.h" - - -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_abort_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *account_name, - const char *withdrawal_id) -{ - struct WithdrawalOperation *wo; - struct Account *acc; - - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, - withdrawal_id); - if (NULL == wo) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - withdrawal_id); - } - acc = TALER_FAKEBANK_lookup_account_ (h, - account_name, - NULL); - if (NULL == acc) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_UNKNOWN_ACCOUNT, - account_name); - } - if (wo->debit_account != acc) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - account_name); - } - if (wo->confirmation_done) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_BANK_ABORT_CONFIRM_CONFLICT, - account_name); - } - wo->aborted = true; - TALER_FAKEBANK_notify_withdrawal_ (h, - wo); - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_json (connection, - json_object (), /* FIXME: #7301 */ - MHD_HTTP_OK); -} diff --git a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.h b/src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.h deleted file mode 100644 index ba99e493e..000000000 --- a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_abort.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - TALER is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see -*/ -/** - * @file bank-lib/fakebank_bank_post_accounts_withdrawals_abort.h - * @brief implement bank API withdrawals /abort endpoint - * @author Christian Grothoff - */ -#ifndef FAKEBANK_BANK_POST_ACCOUNTS_WITHDRAWALS_ABORT_H -#define FAKEBANK_BANK_POST_ACCOUNTS_WITHDRAWALS_ABORT_H - -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include -#include "fakebank.h" - - -/** - * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/abort request. - * - * @param h our fakebank handle - * @param connection the connection - * @param account_name name of the debited account - * @param withdrawal_id the withdrawal operation identifier - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_abort_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *account_name, - const char *withdrawal_id); - -#endif diff --git a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.c b/src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.c deleted file mode 100644 index 232b4f92f..000000000 --- a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - TALER is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see -*/ -/** - * @file bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.c - * @brief implement bank API withdrawals /confirm endpoint - * @author Christian Grothoff - */ -#include "platform.h" -#include -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include -#include "fakebank.h" -#include "fakebank_bank_post_accounts_withdrawals_confirm.h" -#include "fakebank_common_lookup.h" -#include "fakebank_common_lp.h" -#include "fakebank_common_make_admin_transfer.h" - - -/** - * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/confirm request. - * - * @param h our fakebank handle - * @param connection the connection - * @param account_name name of the debited account - * @param withdrawal_id the withdrawal operation identifier - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_confirm_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *account_name, - const char *withdrawal_id) -{ - struct WithdrawalOperation *wo; - struct Account *acc; - - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, - withdrawal_id); - if (NULL == wo) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - withdrawal_id); - } - acc = TALER_FAKEBANK_lookup_account_ (h, - account_name, - NULL); - if (NULL == acc) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_UNKNOWN_ACCOUNT, - account_name); - } - if (wo->debit_account != acc) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_NOT_FOUND, - TALER_EC_BANK_TRANSACTION_NOT_FOUND, - account_name); - } - if (NULL == wo->exchange_account) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_BAD_REQUEST, - TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED, - NULL); - } - if (wo->aborted) - { - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_BANK_CONFIRM_ABORT_CONFLICT, - account_name); - } - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - if (GNUNET_OK != - TALER_FAKEBANK_make_admin_transfer_ ( - h, - wo->debit_account->account_name, - wo->exchange_account->account_name, - &wo->amount, - &wo->reserve_pub, - &wo->row_id, - &wo->timestamp)) - { - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_CONFLICT, - TALER_EC_BANK_DUPLICATE_RESERVE_PUB_SUBJECT, - NULL); - } - /* Re-acquiring the lock and continuing to operate on 'wo' - is currently (!) acceptable because we NEVER free 'wo' - until shutdown. We may want to revise this if keeping - all withdraw operations in RAM becomes an issue... */ - GNUNET_assert (0 == - pthread_mutex_lock (&h->big_lock)); - wo->confirmation_done = true; - TALER_FAKEBANK_notify_withdrawal_ (h, - wo); - GNUNET_assert (0 == - pthread_mutex_unlock (&h->big_lock)); - return TALER_MHD_reply_json (connection, - json_object (), - MHD_HTTP_OK); -} diff --git a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.h b/src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.h deleted file mode 100644 index 2c301ca2c..000000000 --- a/src/bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - This file is part of TALER - (C) 2016-2023 Taler Systems SA - - TALER is free software; you can redistribute it and/or - modify it under the terms of the GNU 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 General Public License for more details. - - You should have received a copy of the GNU General Public - License along with TALER; see the file COPYING. If not, - see -*/ -/** - * @file bank-lib/fakebank_bank_post_accounts_withdrawals_confirm.h - * @brief implement bank API withdrawals /confirm endpoint - * @author Christian Grothoff - */ -#ifndef FAKEBANK_BANK_POST_ACCOUNTS_WITHDRAWALS_CONFIRM_H -#define FAKEBANK_BANK_POST_ACCOUNTS_WITHDRAWALS_CONFIRM_H - -#include "taler_fakebank_lib.h" -#include "taler_bank_service.h" -#include "taler_mhd_lib.h" -#include -#include "fakebank.h" - - -/** - * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/confirm request. - * - * @param h our fakebank handle - * @param connection the connection - * @param account_name name of the debited account - * @param withdrawal_id the withdrawal operation identifier - * @return MHD result code - */ -MHD_RESULT -TALER_FAKEBANK_bank_withdrawals_confirm_ ( - struct TALER_FAKEBANK_Handle *h, - struct MHD_Connection *connection, - const char *account_name, - const char *withdrawal_id); - -#endif diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_abort.c b/src/bank-lib/fakebank_bank_post_withdrawals_abort.c new file mode 100644 index 000000000..f8ebf1b93 --- /dev/null +++ b/src/bank-lib/fakebank_bank_post_withdrawals_abort.c @@ -0,0 +1,74 @@ +/* + This file is part of TALER + (C) 2016-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, + see +*/ +/** + * @file bank-lib/fakebank_bank_post_withdrawals_abort.c + * @brief implement bank API withdrawals /abort endpoint + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include +#include "fakebank.h" +#include "fakebank_bank_post_withdrawals_abort.h" +#include "fakebank_common_lookup.h" +#include "fakebank_common_lp.h" + + +MHD_RESULT +TALER_FAKEBANK_bank_withdrawals_abort_ ( + struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *withdrawal_id) +{ + struct WithdrawalOperation *wo; + + GNUNET_assert (0 == + pthread_mutex_lock (&h->big_lock)); + wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, + withdrawal_id); + if (NULL == wo) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_BANK_TRANSACTION_NOT_FOUND, + withdrawal_id); + } + if (wo->confirmation_done) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_CONFLICT, + TALER_EC_BANK_ABORT_CONFIRM_CONFLICT, + withdrawal_id); + } + wo->aborted = true; + TALER_FAKEBANK_notify_withdrawal_ (h, + wo); + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_json (connection, + json_object (), /* FIXME: #7301 */ + MHD_HTTP_OK); +} diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_abort.h b/src/bank-lib/fakebank_bank_post_withdrawals_abort.h new file mode 100644 index 000000000..fcc94e201 --- /dev/null +++ b/src/bank-lib/fakebank_bank_post_withdrawals_abort.h @@ -0,0 +1,48 @@ +/* + This file is part of TALER + (C) 2016-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, + see +*/ +/** + * @file bank-lib/fakebank_bank_post_accounts_withdrawals_abort.h + * @brief implement bank API withdrawals /abort endpoint + * @author Christian Grothoff + */ +#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_ABORT_H +#define FAKEBANK_BANK_POST_WITHDRAWALS_ABORT_H + +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include +#include "fakebank.h" + + +/** + * Handle POST /withdrawals/{withdrawal_id}/abort request. + * + * @param h our fakebank handle + * @param connection the connection + * @param withdrawal_id the withdrawal operation identifier + * @return MHD result code + */ +MHD_RESULT +TALER_FAKEBANK_bank_withdrawals_abort_ ( + struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *withdrawal_id); + +#endif diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c new file mode 100644 index 000000000..90aaf5e2c --- /dev/null +++ b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.c @@ -0,0 +1,115 @@ +/* + This file is part of TALER + (C) 2016-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, + see +*/ +/** + * @file bank-lib/fakebank_bank_post_withdrawals_confirm.c + * @brief implement bank API withdrawals /confirm endpoint + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include +#include "fakebank.h" +#include "fakebank_bank_post_withdrawals_confirm.h" +#include "fakebank_common_lookup.h" +#include "fakebank_common_lp.h" +#include "fakebank_common_make_admin_transfer.h" + + +/** + * Handle POST /withdrawals/{withdrawal_id}/confirm request. + * + * @param h our fakebank handle + * @param connection the connection + * @param withdrawal_id the withdrawal operation identifier + * @return MHD result code + */ +MHD_RESULT +TALER_FAKEBANK_bank_withdrawals_confirm_ ( + struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *withdrawal_id) +{ + struct WithdrawalOperation *wo; + + GNUNET_assert (0 == + pthread_mutex_lock (&h->big_lock)); + wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h, + withdrawal_id); + if (NULL == wo) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_BANK_TRANSACTION_NOT_FOUND, + withdrawal_id); + } + if (NULL == wo->exchange_account) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_BAD_REQUEST, + TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED, + NULL); + } + if (wo->aborted) + { + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_CONFLICT, + TALER_EC_BANK_CONFIRM_ABORT_CONFLICT, + withdrawal_id); + } + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + if (GNUNET_OK != + TALER_FAKEBANK_make_admin_transfer_ ( + h, + wo->debit_account->account_name, + wo->exchange_account->account_name, + &wo->amount, + &wo->reserve_pub, + &wo->row_id, + &wo->timestamp)) + { + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_CONFLICT, + TALER_EC_BANK_DUPLICATE_RESERVE_PUB_SUBJECT, + NULL); + } + /* Re-acquiring the lock and continuing to operate on 'wo' + is currently (!) acceptable because we NEVER free 'wo' + until shutdown. We may want to revise this if keeping + all withdraw operations in RAM becomes an issue... */ + GNUNET_assert (0 == + pthread_mutex_lock (&h->big_lock)); + wo->confirmation_done = true; + TALER_FAKEBANK_notify_withdrawal_ (h, + wo); + GNUNET_assert (0 == + pthread_mutex_unlock (&h->big_lock)); + return TALER_MHD_reply_json (connection, + json_object (), + MHD_HTTP_OK); +} diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h new file mode 100644 index 000000000..56cd2deda --- /dev/null +++ b/src/bank-lib/fakebank_bank_post_withdrawals_confirm.h @@ -0,0 +1,48 @@ +/* + This file is part of TALER + (C) 2016-2023 Taler Systems SA + + TALER is free software; you can redistribute it and/or + modify it under the terms of the GNU 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 General Public License for more details. + + You should have received a copy of the GNU General Public + License along with TALER; see the file COPYING. If not, + see +*/ +/** + * @file bank-lib/fakebank_bank_post_withdrawals_confirm.h + * @brief implement bank API withdrawals /confirm endpoint + * @author Christian Grothoff + */ +#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_CONFIRM_H +#define FAKEBANK_BANK_POST_WITHDRAWALS_CONFIRM_H + +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include +#include "fakebank.h" + + +/** + * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/confirm request. + * + * @param h our fakebank handle + * @param connection the connection + * @param withdrawal_id the withdrawal operation identifier + * @return MHD result code + */ +MHD_RESULT +TALER_FAKEBANK_bank_withdrawals_confirm_ ( + struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *withdrawal_id); + +#endif -- cgit v1.2.3