diff options
author | Christian Grothoff <christian@grothoff.org> | 2023-09-21 00:01:45 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2023-09-21 00:01:45 +0200 |
commit | 48e58124fb61ded372f147d00d112f108c997f81 (patch) | |
tree | 21c406d2a952243416faf18e5ccf84d79b3b134b /src/bank-lib/fakebank_tbi.c | |
parent | 7529ffb8b05bb63386630b3667d1e42db889f31a (diff) | |
download | exchange-48e58124fb61ded372f147d00d112f108c997f81.tar.xz |
major refactor of fakebank implementation
Diffstat (limited to 'src/bank-lib/fakebank_tbi.c')
-rw-r--r-- | src/bank-lib/fakebank_tbi.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/src/bank-lib/fakebank_tbi.c b/src/bank-lib/fakebank_tbi.c new file mode 100644 index 000000000..27b930d9f --- /dev/null +++ b/src/bank-lib/fakebank_tbi.c @@ -0,0 +1,126 @@ +/* + 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 <http://www.gnu.org/licenses/> +*/ +/** + * @file bank-lib/fakebank_tbi.c + * @brief main entry point to the Taler Bank Integration (TBI) API implementation + * @author Christian Grothoff <christian@grothoff.org> + */ +#include "platform.h" +#include "taler_fakebank_lib.h" +#include "taler_bank_service.h" +#include "taler_mhd_lib.h" +#include <gnunet/gnunet_mhd_compat.h> +#include "fakebank.h" +#include "fakebank_tbi.h" +#include "fakebank_tbi_get_withdrawal_operation.h" +#include "fakebank_tbi_post_withdrawal_operation.h" + + +MHD_RESULT +TALER_FAKEBANK_tbi_main_ (struct TALER_FAKEBANK_Handle *h, + struct MHD_Connection *connection, + const char *url, + const char *method, + const char *upload_data, + size_t *upload_data_size, + void **con_cls) +{ + if (0 == strcasecmp (method, + MHD_HTTP_METHOD_HEAD)) + method = MHD_HTTP_METHOD_GET; + if ( (0 == strcmp (url, + "/config")) && + (0 == strcasecmp (method, + MHD_HTTP_METHOD_GET)) ) + { + return TALER_MHD_REPLY_JSON_PACK ( + connection, + MHD_HTTP_OK, + GNUNET_JSON_pack_string ("version", + "0:0:0"), + GNUNET_JSON_pack_string ("currency", + h->currency), + GNUNET_JSON_pack_string ("name", + "taler-bank-integration")); + } + if ( (0 == strncmp (url, + "/withdrawal-operation/", + strlen ("/withdrawal-operation/"))) && + (0 == strcasecmp (method, + MHD_HTTP_METHOD_GET)) ) + { + const char *wopid = &url[strlen ("/withdrawal-operation/")]; + const char *lp_s + = MHD_lookup_connection_value (connection, + MHD_GET_ARGUMENT_KIND, + "long_poll_ms"); + struct GNUNET_TIME_Relative lp = GNUNET_TIME_UNIT_ZERO; + + if (NULL != lp_s) + { + unsigned long long d; + char dummy; + + if (1 != sscanf (lp_s, + "%llu%c", + &d, + &dummy)) + { + GNUNET_break_op (0); + return TALER_MHD_reply_with_error (connection, + MHD_HTTP_BAD_REQUEST, + TALER_EC_GENERIC_PARAMETER_MALFORMED, + "long_poll_ms"); + } + lp = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, + d); + } + return TALER_FAKEBANK_tbi_get_withdrawal_operation_ (h, + connection, + wopid, + lp, + con_cls); + + } + if ( (0 == strncmp (url, + "/withdrawal-operation/", + strlen ("/withdrawal-operation/"))) && + (0 == strcasecmp (method, + MHD_HTTP_METHOD_POST)) ) + { + const char *wopid = &url[strlen ("/withdrawal-operation/")]; + + return TALER_FAKEBANK_tbi_post_withdrawal (h, + connection, + wopid, + upload_data, + upload_data_size, + con_cls); + } + + TALER_LOG_ERROR ("Breaking URL: %s %s\n", + method, + url); + GNUNET_break_op (0); + return TALER_MHD_reply_with_error ( + connection, + MHD_HTTP_NOT_FOUND, + TALER_EC_GENERIC_ENDPOINT_UNKNOWN, + url); +} |