Line data Source code
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/taler_fakebank_lib.h"
25 : #include "taler/taler_bank_service.h"
26 : #include "taler/taler_mhd_lib.h"
27 : #include <gnunet/gnunet_mhd_compat.h>
28 : #include "fakebank.h"
29 : #include "fakebank_twg.h"
30 : #include "fakebank_twg_admin_add_incoming.h"
31 : #include "fakebank_twg_admin_add_kycauth.h"
32 : #include "fakebank_twg_get_root.h"
33 : #include "fakebank_twg_get_transfers.h"
34 : #include "fakebank_twg_history.h"
35 : #include "fakebank_twg_transfer.h"
36 :
37 :
38 : MHD_RESULT
39 573 : TALER_FAKEBANK_twg_main_ (
40 : struct TALER_FAKEBANK_Handle *h,
41 : struct MHD_Connection *connection,
42 : const char *account,
43 : const char *url,
44 : const char *method,
45 : const char *upload_data,
46 : size_t *upload_data_size,
47 : void **con_cls)
48 : {
49 573 : GNUNET_log (GNUNET_ERROR_TYPE_INFO,
50 : "Fakebank TWG, serving URL `%s' for account `%s'\n",
51 : url,
52 : account);
53 573 : if ( (0 == strcmp (url,
54 0 : "/config")) &&
55 0 : (0 == strcasecmp (method,
56 : MHD_HTTP_METHOD_GET)) )
57 : {
58 : /* GET /config */
59 0 : return TALER_MHD_REPLY_JSON_PACK (
60 : connection,
61 : MHD_HTTP_OK,
62 : GNUNET_JSON_pack_string ("version",
63 : "3:0:3"),
64 : GNUNET_JSON_pack_string ("currency",
65 : h->currency),
66 : GNUNET_JSON_pack_string ("implementation",
67 : "urn:net:taler:specs:bank:fakebank"),
68 : GNUNET_JSON_pack_string ("name",
69 : "taler-wire-gateway"));
70 : }
71 573 : if (0 == strcasecmp (method,
72 : MHD_HTTP_METHOD_GET))
73 : {
74 177 : if ( (0 == strcmp (url,
75 172 : "/history/incoming")) &&
76 : (NULL != account) )
77 172 : return TALER_FAKEBANK_twg_get_credit_history_ (h,
78 : connection,
79 : account,
80 : con_cls);
81 5 : if ( (0 == strcmp (url,
82 5 : "/history/outgoing")) &&
83 : (NULL != account) )
84 5 : return TALER_FAKEBANK_twg_get_debit_history_ (h,
85 : connection,
86 : account,
87 : con_cls);
88 0 : if (0 == strcmp (url,
89 : "/"))
90 0 : return TALER_FAKEBANK_twg_get_root_ (h,
91 : connection);
92 0 : if ( (0 == strcmp (url,
93 0 : "/transfers")) &&
94 : (NULL != account) )
95 0 : return TALER_FAKEBANK_twg_get_transfers_ (h,
96 : connection,
97 : account,
98 : con_cls);
99 0 : if ( (0 == strncmp (url,
100 : "/transfers/",
101 0 : strlen ("/transfers/"))) &&
102 : (NULL != account) )
103 0 : return TALER_FAKEBANK_twg_get_transfers_id_ (
104 : h,
105 : connection,
106 : account,
107 : &url[strlen ("/transfers/")],
108 : con_cls);
109 : }
110 396 : else if (0 == strcasecmp (method,
111 : MHD_HTTP_METHOD_POST))
112 : {
113 396 : if ( (0 == strcmp (url,
114 183 : "/admin/add-incoming")) &&
115 : (NULL != account) )
116 183 : return TALER_FAKEBANK_twg_admin_add_incoming_ (h,
117 : connection,
118 : account,
119 : upload_data,
120 : upload_data_size,
121 : con_cls);
122 213 : if ( (0 == strcmp (url,
123 48 : "/admin/add-kycauth")) &&
124 : (NULL != account) )
125 48 : return TALER_FAKEBANK_twg_admin_add_kycauth_ (h,
126 : connection,
127 : account,
128 : upload_data,
129 : upload_data_size,
130 : con_cls);
131 165 : if ( (0 == strcmp (url,
132 165 : "/transfer")) &&
133 : (NULL != account) )
134 165 : return TALER_FAKEBANK_handle_transfer_ (h,
135 : connection,
136 : account,
137 : upload_data,
138 : upload_data_size,
139 : con_cls);
140 : }
141 : /* Unexpected URL path, just close the connection. */
142 0 : TALER_LOG_ERROR ("Breaking URL: %s %s\n",
143 : method,
144 : url);
145 0 : GNUNET_break_op (0);
146 0 : return TALER_MHD_reply_with_error (
147 : connection,
148 : MHD_HTTP_NOT_FOUND,
149 : TALER_EC_GENERIC_ENDPOINT_UNKNOWN,
150 : url);
151 : }
|