fakebank_twg.c (5706B)
1 /* 2 This file is part of TALER 3 (C) 2016-2024 Taler Systems SA 4 5 TALER is free software; you can redistribute it and/or 6 modify it under the terms of the GNU General Public License 7 as published by the Free Software Foundation; either version 3, 8 or (at your option) any later version. 9 10 TALER is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public 16 License along with TALER; see the file COPYING. If not, 17 see <http://www.gnu.org/licenses/> 18 */ 19 /** 20 * @file bank-lib/fakebank_twg.c 21 * @brief main entry point for the Taler Wire Gateway API 22 * @author Christian Grothoff <christian@grothoff.org> 23 */ 24 #include "taler/platform.h" 25 #include "taler/taler_fakebank_lib.h" 26 #include "taler/taler_bank_service.h" 27 #include "taler/taler_mhd_lib.h" 28 #include <gnunet/gnunet_mhd_compat.h> 29 #include "fakebank.h" 30 #include "fakebank_twg.h" 31 #include "fakebank_twg_admin_add_incoming.h" 32 #include "fakebank_twg_admin_add_kycauth.h" 33 #include "fakebank_twg_get_root.h" 34 #include "fakebank_twg_get_transfers.h" 35 #include "fakebank_twg_history.h" 36 #include "fakebank_twg_transfer.h" 37 38 39 MHD_RESULT 40 TALER_FAKEBANK_twg_main_ ( 41 struct TALER_FAKEBANK_Handle *h, 42 struct MHD_Connection *connection, 43 const char *account, 44 const char *url, 45 const char *method, 46 const char *upload_data, 47 size_t *upload_data_size, 48 void **con_cls) 49 { 50 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 51 "Fakebank TWG, serving URL `%s' for account `%s'\n", 52 url, 53 account); 54 if ( (0 == strcmp (url, 55 "/config")) && 56 (0 == strcasecmp (method, 57 MHD_HTTP_METHOD_GET)) ) 58 { 59 /* GET /config */ 60 return TALER_MHD_REPLY_JSON_PACK ( 61 connection, 62 MHD_HTTP_OK, 63 GNUNET_JSON_pack_string ("version", 64 "3:0:3"), 65 GNUNET_JSON_pack_string ("currency", 66 h->currency), 67 GNUNET_JSON_pack_string ("implementation", 68 "urn:net:taler:specs:bank:fakebank"), 69 GNUNET_JSON_pack_string ("name", 70 "taler-wire-gateway")); 71 } 72 if (0 == strcasecmp (method, 73 MHD_HTTP_METHOD_GET)) 74 { 75 if ( (0 == strcmp (url, 76 "/history/incoming")) && 77 (NULL != account) ) 78 return TALER_FAKEBANK_twg_get_credit_history_ (h, 79 connection, 80 account, 81 con_cls); 82 if ( (0 == strcmp (url, 83 "/history/outgoing")) && 84 (NULL != account) ) 85 return TALER_FAKEBANK_twg_get_debit_history_ (h, 86 connection, 87 account, 88 con_cls); 89 if (0 == strcmp (url, 90 "/")) 91 return TALER_FAKEBANK_twg_get_root_ (h, 92 connection); 93 if ( (0 == strcmp (url, 94 "/transfers")) && 95 (NULL != account) ) 96 return TALER_FAKEBANK_twg_get_transfers_ (h, 97 connection, 98 account, 99 con_cls); 100 if ( (0 == strncmp (url, 101 "/transfers/", 102 strlen ("/transfers/"))) && 103 (NULL != account) ) 104 return TALER_FAKEBANK_twg_get_transfers_id_ ( 105 h, 106 connection, 107 account, 108 &url[strlen ("/transfers/")], 109 con_cls); 110 } 111 else if (0 == strcasecmp (method, 112 MHD_HTTP_METHOD_POST)) 113 { 114 if ( (0 == strcmp (url, 115 "/admin/add-incoming")) && 116 (NULL != account) ) 117 return TALER_FAKEBANK_twg_admin_add_incoming_ (h, 118 connection, 119 account, 120 upload_data, 121 upload_data_size, 122 con_cls); 123 if ( (0 == strcmp (url, 124 "/admin/add-kycauth")) && 125 (NULL != account) ) 126 return TALER_FAKEBANK_twg_admin_add_kycauth_ (h, 127 connection, 128 account, 129 upload_data, 130 upload_data_size, 131 con_cls); 132 if ( (0 == strcmp (url, 133 "/transfer")) && 134 (NULL != account) ) 135 return TALER_FAKEBANK_handle_transfer_ (h, 136 connection, 137 account, 138 upload_data, 139 upload_data_size, 140 con_cls); 141 } 142 /* Unexpected URL path, just close the connection. */ 143 TALER_LOG_ERROR ("Breaking URL: %s %s\n", 144 method, 145 url); 146 GNUNET_break_op (0); 147 return TALER_MHD_reply_with_error ( 148 connection, 149 MHD_HTTP_NOT_FOUND, 150 TALER_EC_GENERIC_ENDPOINT_UNKNOWN, 151 url); 152 }