Line data Source code
1 : /*
2 : This file is part of TALER
3 : Copyright (C) 2014-2024 Taler Systems SA
4 :
5 : TALER is free software; you can redistribute it and/or modify
6 : it under the terms of the GNU General Public License as
7 : published by the Free Software Foundation; either version 3, or
8 : (at your option) any later version.
9 :
10 : TALER is distributed in the hope that it will be useful, but
11 : 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, see
17 : <http://www.gnu.org/licenses/>
18 : */
19 : /**
20 : * @file testing/test_kyc_api.c
21 : * @brief testcase to test the KYC processes
22 : * @author Christian Grothoff
23 : */
24 : #include "taler/taler_util.h"
25 : #include "taler/taler_attributes.h"
26 : #include "taler/taler_json_lib.h"
27 : #include <gnunet/gnunet_util_lib.h>
28 : #include <microhttpd.h>
29 : #include "taler/taler_bank_service.h"
30 : #include "taler/taler_testing_lib.h"
31 :
32 :
33 : /**
34 : * Configuration file we use. One (big) configuration is used
35 : * for the various components for this test.
36 : */
37 : #define CONFIG_FILE "test_kyc_api.conf"
38 :
39 : /**
40 : * Our credentials.
41 : */
42 : struct TALER_TESTING_Credentials cred;
43 :
44 :
45 : /**
46 : * Execute the taler-exchange-wirewatch command with
47 : * our configuration file.
48 : *
49 : * @param label label to use for the command.
50 : */
51 : #define CMD_EXEC_WIREWATCH(label) \
52 : TALER_TESTING_cmd_exec_wirewatch2 ( \
53 : label, \
54 : CONFIG_FILE, \
55 : "exchange-account-2")
56 :
57 : /**
58 : * Execute the taler-exchange-aggregator, closer and transfer commands with
59 : * our configuration file.
60 : *
61 : * @param label label to use for the command.
62 : */
63 : #define CMD_EXEC_AGGREGATOR(label) \
64 : TALER_TESTING_cmd_sleep ( \
65 : label "-sleep", 1), \
66 : TALER_TESTING_cmd_exec_aggregator_with_kyc ( \
67 : label, CONFIG_FILE), \
68 : TALER_TESTING_cmd_exec_transfer ( \
69 : label, CONFIG_FILE)
70 :
71 : /**
72 : * Run wire transfer of funds from some user's account to the
73 : * exchange.
74 : *
75 : * @param label label to use for the command.
76 : * @param amount amount to transfer, i.e. "EUR:1"
77 : */
78 : #define CMD_TRANSFER_TO_EXCHANGE(label,amount) \
79 : TALER_TESTING_cmd_admin_add_incoming ( \
80 : label, \
81 : amount, \
82 : &cred.ba, \
83 : cred.user42_payto)
84 :
85 : /**
86 : * Main function that will tell the interpreter what commands to
87 : * run.
88 : *
89 : * @param cls closure
90 : */
91 : static void
92 1 : run (void *cls,
93 : struct TALER_TESTING_Interpreter *is)
94 : {
95 : struct TALER_TESTING_Command withdraw[] = {
96 1 : CMD_TRANSFER_TO_EXCHANGE (
97 : "create-reserve-1",
98 : "EUR:15.02"),
99 1 : TALER_TESTING_cmd_check_bank_admin_transfer (
100 : "check-create-reserve-1",
101 : "EUR:15.02",
102 : cred.user42_payto,
103 : cred.exchange_payto,
104 : "create-reserve-1"),
105 1 : CMD_EXEC_WIREWATCH ("wirewatch-1"),
106 1 : TALER_TESTING_cmd_withdraw_amount (
107 : "withdraw-coin-1-no-kyc",
108 : "create-reserve-1",
109 : "EUR:10",
110 : 0, /* age restriction off */
111 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
112 1 : TALER_TESTING_cmd_withdraw_amount (
113 : "withdraw-coin-1",
114 : "create-reserve-1",
115 : "EUR:5",
116 : 0, /* age restriction off */
117 : MHD_HTTP_OK),
118 1 : TALER_TESTING_cmd_end ()
119 : };
120 :
121 : /**
122 : * Test withdraw with KYC.
123 : */
124 : struct TALER_TESTING_Command withdraw_kyc[] = {
125 1 : CMD_TRANSFER_TO_EXCHANGE (
126 : "create-reserve-kyc",
127 : "EUR:15.02"),
128 1 : TALER_TESTING_cmd_check_bank_admin_transfer (
129 : "check-create-reserve-kyc",
130 : "EUR:15.02",
131 : cred.user42_payto,
132 : cred.exchange_payto,
133 : "create-reserve-kyc"),
134 1 : CMD_EXEC_WIREWATCH ("wirewatch-kyc"),
135 1 : TALER_TESTING_cmd_withdraw_amount (
136 : "withdraw-coin-1-lacking-kyc",
137 : "create-reserve-kyc",
138 : "EUR:10",
139 : 0, /* age restriction off */
140 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
141 1 : TALER_TESTING_cmd_admin_add_kycauth (
142 : "setup-account-key-withdraw",
143 : "EUR:0.01",
144 : &cred.ba,
145 : cred.user42_payto,
146 : NULL /* create new key */),
147 1 : CMD_EXEC_WIREWATCH (
148 : "import-kyc-account-withdraw"),
149 1 : TALER_TESTING_cmd_check_kyc_get (
150 : "check-kyc-withdraw",
151 : "withdraw-coin-1-lacking-kyc",
152 : "setup-account-key-withdraw",
153 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
154 : MHD_HTTP_ACCEPTED),
155 1 : TALER_TESTING_cmd_get_kyc_info (
156 : "get-kyc-info-withdraw",
157 : "check-kyc-withdraw",
158 : MHD_HTTP_OK),
159 1 : TALER_TESTING_cmd_post_kyc_start (
160 : "start-kyc-process-withdraw",
161 : "get-kyc-info-withdraw",
162 : 0,
163 : MHD_HTTP_OK),
164 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
165 : "proof-kyc-withdraw-oauth2",
166 : "withdraw-coin-1-lacking-kyc",
167 : "test-oauth2",
168 : "pass",
169 : MHD_HTTP_SEE_OTHER),
170 1 : TALER_TESTING_cmd_withdraw_with_age_proof (
171 : "age-withdraw-coin-1-with-kyc",
172 : "create-reserve-kyc",
173 : 1,
174 : MHD_HTTP_CREATED,
175 : "EUR:5",
176 : NULL),
177 1 : TALER_TESTING_cmd_withdraw_reveal_age_proof (
178 : "reveal-age-withdraw-coin-1-with-kyc",
179 : "age-withdraw-coin-1-with-kyc",
180 : MHD_HTTP_OK),
181 : /* Attestations above are bound to the originating *bank* account,
182 : not to the reserve (!). Hence, they are NOT found here! */
183 1 : TALER_TESTING_cmd_reserve_get_attestable (
184 : "reserve-get-attestable",
185 : "create-reserve-kyc",
186 : MHD_HTTP_NOT_FOUND,
187 : NULL),
188 1 : TALER_TESTING_cmd_end ()
189 : };
190 : struct TALER_TESTING_Command spend[] = {
191 1 : TALER_TESTING_cmd_set_var (
192 : "account-priv",
193 : TALER_TESTING_cmd_deposit (
194 : "deposit-simple-fail-kyc",
195 : "withdraw-coin-1",
196 : 0,
197 : cred.user43_payto,
198 : "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
199 1 : GNUNET_TIME_UNIT_ZERO,
200 : "EUR:5",
201 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS)),
202 1 : TALER_TESTING_cmd_admin_add_kycauth (
203 : "kyc-auth-transfer",
204 : "EUR:0.01",
205 : &cred.ba,
206 : cred.user42_payto,
207 : "deposit-simple-fail-kyc"),
208 1 : TALER_TESTING_cmd_admin_add_kycauth (
209 : "kyc-auth-transfer",
210 : "EUR:0.01",
211 : &cred.ba,
212 : cred.user43_payto,
213 : "deposit-simple-fail-kyc"),
214 1 : CMD_EXEC_WIREWATCH (
215 : "import-kyc-account"),
216 1 : TALER_TESTING_cmd_deposit (
217 : "deposit-simple",
218 : "withdraw-coin-1",
219 : 0,
220 : cred.user43_payto,
221 : "{\"items\":[{\"name\":\"ice cream\",\"value\":1}]}",
222 1 : GNUNET_TIME_UNIT_ZERO,
223 : "EUR:5",
224 : MHD_HTTP_OK),
225 1 : TALER_TESTING_cmd_deposits_get (
226 : "track-deposit",
227 : "deposit-simple",
228 : 0,
229 : MHD_HTTP_ACCEPTED,
230 : NULL),
231 1 : TALER_TESTING_cmd_end ()
232 : };
233 :
234 :
235 : struct TALER_TESTING_Command track[] = {
236 1 : CMD_EXEC_AGGREGATOR ("run-aggregator-before-kyc"),
237 1 : TALER_TESTING_cmd_check_bank_empty (
238 : "check_bank_empty-no-kyc"),
239 1 : TALER_TESTING_cmd_deposits_get (
240 : "track-deposit-kyc-ready",
241 : "deposit-simple",
242 : 0,
243 : MHD_HTTP_ACCEPTED,
244 : NULL),
245 1 : TALER_TESTING_cmd_admin_add_kycauth (
246 : "setup-account-key-deposit",
247 : "EUR:0.01",
248 : &cred.ba,
249 : cred.user43_payto,
250 : NULL /* create new key */),
251 1 : CMD_EXEC_WIREWATCH (
252 : "import-kyc-account-deposit"),
253 1 : TALER_TESTING_cmd_check_kyc_get (
254 : "check-kyc-deposit",
255 : "track-deposit-kyc-ready",
256 : "setup-account-key-deposit",
257 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
258 : MHD_HTTP_ACCEPTED),
259 1 : TALER_TESTING_cmd_get_kyc_info (
260 : "get-kyc-info-deposit",
261 : "check-kyc-deposit",
262 : MHD_HTTP_OK),
263 1 : TALER_TESTING_cmd_post_kyc_start (
264 : "start-kyc-process-deposit",
265 : "get-kyc-info-deposit",
266 : 0,
267 : MHD_HTTP_OK),
268 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
269 : "proof-kyc-no-service",
270 : "track-deposit-kyc-ready",
271 : "test-oauth2",
272 : "bad",
273 : MHD_HTTP_BAD_GATEWAY),
274 1 : TALER_TESTING_cmd_oauth_with_birthdate (
275 : "start-oauth-service",
276 : "2005-00-00",
277 : 6666),
278 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
279 : "proof-kyc-fail",
280 : "track-deposit-kyc-ready",
281 : "test-oauth2",
282 : "bad",
283 : MHD_HTTP_FORBIDDEN),
284 1 : TALER_TESTING_cmd_check_kyc_get (
285 : "check-kyc-deposit-again",
286 : "track-deposit-kyc-ready",
287 : "setup-account-key-deposit",
288 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
289 : MHD_HTTP_ACCEPTED),
290 1 : TALER_TESTING_cmd_get_kyc_info (
291 : "get-kyc-info-deposit-again",
292 : "check-kyc-deposit-again",
293 : MHD_HTTP_OK),
294 1 : TALER_TESTING_cmd_post_kyc_start (
295 : "start-kyc-process-deposit-again",
296 : "get-kyc-info-deposit-again",
297 : 0,
298 : MHD_HTTP_OK),
299 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
300 : "proof-kyc-pass",
301 : "track-deposit-kyc-ready",
302 : "test-oauth2",
303 : "pass",
304 : MHD_HTTP_SEE_OTHER),
305 1 : CMD_EXEC_AGGREGATOR (
306 : "run-aggregator-after-kyc"),
307 1 : TALER_TESTING_cmd_check_bank_transfer (
308 : "check_bank_transfer-499c",
309 1 : cred.exchange_url,
310 : "EUR:4.98",
311 : cred.exchange_payto,
312 : cred.user43_payto),
313 1 : TALER_TESTING_cmd_check_bank_empty (
314 : "check_bank_empty"),
315 1 : TALER_TESTING_cmd_end ()
316 : };
317 :
318 : struct TALER_TESTING_Command wallet_kyc[] = {
319 1 : TALER_TESTING_cmd_wallet_kyc_get (
320 : "wallet-kyc-fail",
321 : NULL,
322 : "EUR:1000000",
323 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
324 1 : TALER_TESTING_cmd_check_kyc_get (
325 : "check-kyc-wallet",
326 : "wallet-kyc-fail",
327 : "wallet-kyc-fail",
328 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
329 : MHD_HTTP_ACCEPTED),
330 1 : TALER_TESTING_cmd_get_kyc_info (
331 : "get-kyc-info-kyc-wallet",
332 : "check-kyc-wallet",
333 : MHD_HTTP_OK),
334 1 : TALER_TESTING_cmd_post_kyc_start (
335 : "start-kyc-wallet",
336 : "get-kyc-info-kyc-wallet",
337 : 0,
338 : MHD_HTTP_OK),
339 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
340 : "proof-wallet-kyc",
341 : "wallet-kyc-fail",
342 : "test-oauth2",
343 : "pass",
344 : MHD_HTTP_SEE_OTHER),
345 1 : TALER_TESTING_cmd_check_kyc_get (
346 : "wallet-kyc-check",
347 : "wallet-kyc-fail",
348 : "wallet-kyc-fail",
349 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
350 : MHD_HTTP_OK),
351 1 : TALER_TESTING_cmd_reserve_get_attestable (
352 : "wallet-get-attestable",
353 : "wallet-kyc-fail",
354 : MHD_HTTP_OK,
355 : TALER_ATTRIBUTE_FULL_NAME,
356 : NULL),
357 1 : TALER_TESTING_cmd_reserve_attest (
358 : "wallet-get-attest",
359 : "wallet-kyc-fail",
360 : MHD_HTTP_OK,
361 : TALER_ATTRIBUTE_FULL_NAME,
362 : NULL),
363 1 : TALER_TESTING_cmd_end ()
364 : };
365 :
366 : /**
367 : * Test withdrawal for P2P
368 : */
369 : struct TALER_TESTING_Command p2p_withdraw[] = {
370 : /**
371 : * Move money to the exchange's bank account.
372 : */
373 1 : CMD_TRANSFER_TO_EXCHANGE (
374 : "p2p_create-reserve-1",
375 : "EUR:5.04"),
376 1 : CMD_TRANSFER_TO_EXCHANGE (
377 : "p2p_create-reserve-2",
378 : "EUR:5.01"),
379 1 : CMD_TRANSFER_TO_EXCHANGE (
380 : "p2p_create-reserve-3",
381 : "EUR:0.03"),
382 1 : TALER_TESTING_cmd_reserve_poll (
383 : "p2p_poll-reserve-1",
384 : "p2p_create-reserve-1",
385 : "EUR:5.04",
386 : GNUNET_TIME_UNIT_MINUTES,
387 : MHD_HTTP_OK),
388 1 : TALER_TESTING_cmd_check_bank_admin_transfer (
389 : "p2p_check-create-reserve-1",
390 : "EUR:5.04",
391 : cred.user42_payto,
392 : cred.exchange_payto,
393 : "p2p_create-reserve-1"),
394 1 : TALER_TESTING_cmd_check_bank_admin_transfer (
395 : "p2p_check-create-reserve-2",
396 : "EUR:5.01",
397 : cred.user42_payto,
398 : cred.exchange_payto,
399 : "p2p_create-reserve-2"),
400 : /**
401 : * Make a reserve exist, according to the previous
402 : * transfer.
403 : */
404 1 : CMD_EXEC_WIREWATCH ("p2p_wirewatch-1"),
405 1 : TALER_TESTING_cmd_reserve_poll_finish (
406 : "p2p_finish-poll-reserve-1",
407 : GNUNET_TIME_UNIT_SECONDS,
408 : "p2p_poll-reserve-1"),
409 : /**
410 : * Withdraw EUR:5.
411 : */
412 1 : TALER_TESTING_cmd_withdraw_amount (
413 : "p2p_withdraw-coin-1",
414 : "p2p_create-reserve-1",
415 : "EUR:5",
416 : 0, /* age restriction off */
417 : MHD_HTTP_OK),
418 : /**
419 : * Check the reserve is depleted.
420 : */
421 1 : TALER_TESTING_cmd_status (
422 : "p2p_status-1",
423 : "p2p_create-reserve-1",
424 : "EUR:0.03",
425 : MHD_HTTP_OK),
426 1 : TALER_TESTING_cmd_end ()
427 : };
428 : struct TALER_TESTING_Command push[] = {
429 1 : TALER_TESTING_cmd_purse_create_with_deposit (
430 : "purse-with-deposit",
431 : MHD_HTTP_OK,
432 : "{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
433 : true, /* upload contract */
434 : GNUNET_TIME_UNIT_MINUTES, /* expiration */
435 : "p2p_withdraw-coin-1",
436 : "EUR:1.01",
437 : NULL),
438 1 : TALER_TESTING_cmd_coin_history (
439 : "coin-history-purse-with-deposit",
440 : "p2p_withdraw-coin-1#0",
441 : "EUR:3.99",
442 : MHD_HTTP_OK),
443 1 : TALER_TESTING_cmd_purse_poll (
444 : "push-poll-purse-before-merge",
445 : MHD_HTTP_OK,
446 : "purse-with-deposit",
447 : "EUR:1",
448 : true,
449 : GNUNET_TIME_UNIT_MINUTES),
450 1 : TALER_TESTING_cmd_contract_get (
451 : "push-get-contract",
452 : MHD_HTTP_OK,
453 : true, /* for merge */
454 : "purse-with-deposit"),
455 1 : TALER_TESTING_cmd_purse_merge (
456 : "purse-merge-into-reserve",
457 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS,
458 : "push-get-contract",
459 : "p2p_create-reserve-1"),
460 1 : TALER_TESTING_cmd_check_kyc_get (
461 : "check-kyc-purse-merge",
462 : "purse-merge-into-reserve",
463 : "p2p_create-reserve-1",
464 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
465 : MHD_HTTP_ACCEPTED),
466 1 : TALER_TESTING_cmd_get_kyc_info (
467 : "get-kyc-info-purse-merge-into-reserve",
468 : "check-kyc-purse-merge",
469 : MHD_HTTP_OK),
470 1 : TALER_TESTING_cmd_post_kyc_start (
471 : "start-kyc-process-purse-merge-into-reserve",
472 : "get-kyc-info-purse-merge-into-reserve",
473 : 0,
474 : MHD_HTTP_OK),
475 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
476 : "p2p_proof-kyc",
477 : "purse-merge-into-reserve",
478 : "test-oauth2",
479 : "pass",
480 : MHD_HTTP_SEE_OTHER),
481 1 : TALER_TESTING_cmd_purse_merge (
482 : "purse-merge-into-reserve",
483 : MHD_HTTP_OK,
484 : "push-get-contract",
485 : "p2p_create-reserve-1"),
486 1 : TALER_TESTING_cmd_purse_poll_finish (
487 : "push-merge-purse-poll-finish",
488 : GNUNET_TIME_relative_multiply (
489 : GNUNET_TIME_UNIT_SECONDS,
490 : 5),
491 : "push-poll-purse-before-merge"),
492 1 : TALER_TESTING_cmd_status (
493 : "push-check-post-merge-reserve-balance-get",
494 : "p2p_create-reserve-1",
495 : "EUR:1.03",
496 : MHD_HTTP_OK),
497 1 : TALER_TESTING_cmd_reserve_history (
498 : "push-check-post-merge-reserve-balance-post",
499 : "p2p_create-reserve-1",
500 : "EUR:1.03",
501 : MHD_HTTP_OK),
502 :
503 1 : TALER_TESTING_cmd_end ()
504 : };
505 : struct TALER_TESTING_Command pull[] = {
506 1 : TALER_TESTING_cmd_purse_create_with_reserve (
507 : "purse-create-with-reserve",
508 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS,
509 : "{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
510 : true /* upload contract */,
511 : true /* pay purse fee */,
512 : GNUNET_TIME_UNIT_MINUTES, /* expiration */
513 : "p2p_create-reserve-3"),
514 1 : TALER_TESTING_cmd_check_kyc_get (
515 : "check-kyc-purse-create",
516 : "purse-create-with-reserve",
517 : "purse-create-with-reserve",
518 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
519 : MHD_HTTP_ACCEPTED),
520 1 : TALER_TESTING_cmd_get_kyc_info (
521 : "get-kyc-info-purse-create",
522 : "check-kyc-purse-create",
523 : MHD_HTTP_OK),
524 1 : TALER_TESTING_cmd_post_kyc_start (
525 : "start-kyc-process-purse-create",
526 : "get-kyc-info-purse-create",
527 : 0,
528 : MHD_HTTP_OK),
529 1 : TALER_TESTING_cmd_proof_kyc_oauth2 (
530 : "p2p_proof-kyc-pull",
531 : "purse-create-with-reserve",
532 : "test-oauth2",
533 : "pass",
534 : MHD_HTTP_SEE_OTHER),
535 1 : TALER_TESTING_cmd_purse_create_with_reserve (
536 : "purse-create-with-reserve",
537 : MHD_HTTP_OK,
538 : "{\"amount\":\"EUR:1\",\"summary\":\"ice cream\"}",
539 : true /* upload contract */,
540 : true /* pay purse fee */,
541 : GNUNET_TIME_UNIT_MINUTES, /* expiration */
542 : "p2p_create-reserve-3"),
543 1 : TALER_TESTING_cmd_contract_get (
544 : "pull-get-contract",
545 : MHD_HTTP_OK,
546 : false, /* for deposit */
547 : "purse-create-with-reserve"),
548 1 : TALER_TESTING_cmd_purse_poll (
549 : "pull-poll-purse-before-deposit",
550 : MHD_HTTP_OK,
551 : "purse-create-with-reserve",
552 : "EUR:1",
553 : false,
554 : GNUNET_TIME_UNIT_MINUTES),
555 1 : TALER_TESTING_cmd_purse_deposit_coins (
556 : "purse-deposit-coins",
557 : MHD_HTTP_OK,
558 : 0 /* min age */,
559 : "purse-create-with-reserve",
560 : "p2p_withdraw-coin-1",
561 : "EUR:1.01",
562 : NULL),
563 1 : TALER_TESTING_cmd_coin_history (
564 : "coin-history-purse-pull-deposit",
565 : "p2p_withdraw-coin-1#0",
566 : "EUR:2.98",
567 : MHD_HTTP_OK),
568 1 : TALER_TESTING_cmd_purse_poll_finish (
569 : "pull-deposit-purse-poll-finish",
570 : GNUNET_TIME_relative_multiply (
571 : GNUNET_TIME_UNIT_SECONDS,
572 : 5),
573 : "pull-poll-purse-before-deposit"),
574 1 : TALER_TESTING_cmd_status (
575 : "pull-check-post-merge-reserve-balance-get-2",
576 : "p2p_create-reserve-3",
577 : "EUR:1.03",
578 : MHD_HTTP_OK),
579 1 : TALER_TESTING_cmd_reserve_history (
580 : "push-check-post-merge-reserve-balance-post-2",
581 : "p2p_create-reserve-3",
582 : "EUR:1.03",
583 : MHD_HTTP_OK),
584 1 : TALER_TESTING_cmd_end ()
585 : };
586 : struct TALER_TESTING_Command aml[] = {
587 1 : TALER_TESTING_cmd_set_officer (
588 : "create-aml-officer-1",
589 : NULL,
590 : "Peter Falk",
591 : true,
592 : true),
593 1 : TALER_TESTING_cmd_check_aml_decisions (
594 : "check-decisions-none-normal",
595 : "create-aml-officer-1",
596 : NULL,
597 : MHD_HTTP_OK),
598 : /* Trigger something upon which an AML officer could act */
599 1 : TALER_TESTING_cmd_wallet_kyc_get (
600 : "wallet-trigger-kyc-for-aml",
601 : NULL,
602 : "EUR:1000",
603 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
604 1 : TALER_TESTING_cmd_get_active_legitimization_measures (
605 : "check-decisions-wallet-pending",
606 : "create-aml-officer-1",
607 : "wallet-trigger-kyc-for-aml",
608 : MHD_HTTP_OK,
609 : "{\"measures\": [{\"check_name\": \"oauth-test-id\", \"prog_name\": \"oauth-output-check\", \"context\": {}}], \"is_and_combinator\": true, \"verboten\": false}"),
610 : /* Test that we are not allowed to take AML decisions as our
611 : AML staff account is on read-only */
612 1 : TALER_TESTING_cmd_take_aml_decision (
613 : "aml-decide-while-disabled",
614 : "create-aml-officer-1",
615 : "wallet-trigger-kyc-for-aml",
616 : true /* keep investigating */,
617 : GNUNET_TIME_UNIT_HOURS /* expiration */,
618 : NULL /* successor measure: default */,
619 : "{\"rules\":["
620 : "{\"timeframe\":{\"d_us\":3600000000},"
621 : " \"threshold\":\"EUR:10000\","
622 : " \"operation_type\":\"BALANCE\","
623 : " \"verboten\":true"
624 : "}"
625 : "]}" /* new rules */,
626 : "{}" /* properties */,
627 : "party time",
628 : MHD_HTTP_CONFLICT),
629 : /* Check that no decision was taken, but that we are allowed
630 : to read this information */
631 1 : TALER_TESTING_cmd_check_aml_decisions (
632 : "check-aml-decision-empty",
633 : "create-aml-officer-1",
634 : "aml-decide-while-disabled",
635 : MHD_HTTP_NO_CONTENT),
636 1 : TALER_TESTING_cmd_sleep (
637 : "sleep-1b",
638 : 1),
639 1 : TALER_TESTING_cmd_set_officer (
640 : "create-aml-officer-1-enable",
641 : "create-aml-officer-1",
642 : "Peter Falk",
643 : true,
644 : false),
645 1 : TALER_TESTING_cmd_take_aml_decision (
646 : "aml-decide",
647 : "create-aml-officer-1",
648 : "wallet-trigger-kyc-for-aml",
649 : true /* keep investigating */,
650 : GNUNET_TIME_UNIT_HOURS /* expiration */,
651 : NULL /* successor measure: default */,
652 : "{\"rules\":["
653 : "{\"timeframe\":{\"d_us\":3600000000},"
654 : " \"threshold\":\"EUR:10000\","
655 : " \"operation_type\":\"BALANCE\","
656 : " \"verboten\":true"
657 : "}"
658 : "]}" /* new rules */,
659 : "{}" /* properties */,
660 : "party time",
661 : MHD_HTTP_NO_CONTENT),
662 1 : TALER_TESTING_cmd_check_aml_decisions (
663 : "check-decisions-one-normal",
664 : "create-aml-officer-1",
665 : "aml-decide",
666 : MHD_HTTP_OK),
667 1 : TALER_TESTING_cmd_wallet_kyc_get (
668 : "wallet-trigger-kyc-for-aml-allowed",
669 : "wallet-trigger-kyc-for-aml",
670 : "EUR:1000",
671 : MHD_HTTP_OK),
672 1 : TALER_TESTING_cmd_wallet_kyc_get (
673 : "wallet-trigger-kyc-for-aml-denied-high",
674 : "wallet-trigger-kyc-for-aml",
675 : "EUR:20000",
676 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
677 1 : TALER_TESTING_cmd_sleep (
678 : "sleep-1d",
679 : 1),
680 1 : TALER_TESTING_cmd_set_officer (
681 : "create-aml-officer-1-disable",
682 : "create-aml-officer-1",
683 : "Peter Falk",
684 : false,
685 : true),
686 : /* Test that we are NOT allowed to read AML decisions now that
687 : our AML staff account is disabled */
688 1 : TALER_TESTING_cmd_check_aml_decisions (
689 : "check-aml-decision-disabled",
690 : "create-aml-officer-1",
691 : "aml-decide",
692 : MHD_HTTP_FORBIDDEN),
693 1 : TALER_TESTING_cmd_end ()
694 : };
695 :
696 : struct TALER_TESTING_Command aml_form[] = {
697 1 : TALER_TESTING_cmd_set_officer (
698 : "create-aml-form-officer-1",
699 : NULL,
700 : "Peter Falk",
701 : true,
702 : false),
703 : /* Trigger something upon which an AML officer could act */
704 1 : TALER_TESTING_cmd_wallet_kyc_get (
705 : "wallet-trigger-kyc-for-form-aml",
706 : NULL,
707 : "EUR:1000",
708 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
709 1 : TALER_TESTING_cmd_wallet_kyc_get (
710 : "wallet-trigger-kyc-for-form-aml-disallowed",
711 : "wallet-trigger-kyc-for-form-aml",
712 : "EUR:500",
713 : MHD_HTTP_UNAVAILABLE_FOR_LEGAL_REASONS),
714 : /* AML officer switches from Oauth2 to form */
715 1 : TALER_TESTING_cmd_take_aml_decision (
716 : "aml-decide-form",
717 : "create-aml-form-officer-1",
718 : "wallet-trigger-kyc-for-form-aml",
719 : false /* just awaiting KYC, no investigation */,
720 : GNUNET_TIME_UNIT_HOURS /* expiration */,
721 : NULL /* successor measure: default */,
722 : "{\"rules\":"
723 : " ["
724 : " {"
725 : " \"timeframe\":{\"d_us\":3600000000}"
726 : " ,\"threshold\":\"EUR:0\""
727 : " ,\"operation_type\":\"BALANCE\""
728 : " ,\"display_priority\":65536"
729 : " ,\"measures\":[\"form-measure\"]"
730 : " ,\"verboten\":false"
731 : " }"
732 : " ]" /* end new rules */
733 : ",\"new_measures\":\"form-measure\""
734 : ",\"custom_measures\":"
735 : " {"
736 : " \"form-measure\":"
737 : " {"
738 : " \"check_name\":\"test-form\""
739 : " ,\"prog_name\":\"test-form-check\""
740 : " }"
741 : " }" /* end custom measures */
742 : "}",
743 : "{}" /* properties */,
744 : "form time",
745 : MHD_HTTP_NO_CONTENT),
746 : /* Wallet learns about form submission */
747 1 : TALER_TESTING_cmd_check_kyc_get (
748 : "check-kyc-form",
749 : "wallet-trigger-kyc-for-form-aml",
750 : "wallet-trigger-kyc-for-form-aml",
751 : TALER_EXCHANGE_KLPT_KYC_AUTH_TRANSFER,
752 : MHD_HTTP_ACCEPTED),
753 1 : TALER_TESTING_cmd_get_kyc_info (
754 : "get-kyc-info-form",
755 : "check-kyc-form",
756 : MHD_HTTP_OK),
757 1 : TALER_TESTING_cmd_post_kyc_form (
758 : "wallet-post-kyc-form",
759 : "get-kyc-info-form",
760 : 0, /* requirement index */
761 : "application/json",
762 : "{\"FORM_ID\":\"test\",\"FULL_NAME\":\"Bob\",\"DATE_OF_BIRTH\":\"1990-00-00\"}",
763 : MHD_HTTP_NO_CONTENT),
764 : /* now this should be allowed */
765 1 : TALER_TESTING_cmd_wallet_kyc_get (
766 : "wallet-trigger-kyc-for-form-aml-allowed",
767 : "wallet-trigger-kyc-for-form-aml",
768 : "EUR:500",
769 : MHD_HTTP_OK),
770 1 : TALER_TESTING_cmd_end ()
771 : };
772 :
773 :
774 : struct TALER_TESTING_Command commands[] = {
775 1 : TALER_TESTING_cmd_run_fakebank (
776 : "run-fakebank",
777 1 : cred.cfg,
778 : "exchange-account-2"),
779 1 : TALER_TESTING_cmd_system_start (
780 : "start-taler",
781 : CONFIG_FILE,
782 : "-e",
783 : NULL),
784 1 : TALER_TESTING_cmd_get_exchange (
785 : "get-exchange",
786 1 : cred.cfg,
787 : NULL,
788 : true,
789 : true),
790 1 : TALER_TESTING_cmd_batch (
791 : "withdraw",
792 : withdraw),
793 1 : TALER_TESTING_cmd_batch (
794 : "spend",
795 : spend),
796 1 : TALER_TESTING_cmd_batch (
797 : "track",
798 : track),
799 1 : TALER_TESTING_cmd_batch (
800 : "withdraw-kyc",
801 : withdraw_kyc),
802 1 : TALER_TESTING_cmd_batch (
803 : "wallet-kyc",
804 : wallet_kyc),
805 1 : TALER_TESTING_cmd_batch (
806 : "p2p_withdraw",
807 : p2p_withdraw),
808 1 : TALER_TESTING_cmd_batch (
809 : "push",
810 : push),
811 1 : TALER_TESTING_cmd_batch (
812 : "pull",
813 : pull),
814 1 : TALER_TESTING_cmd_batch ("aml",
815 : aml),
816 1 : TALER_TESTING_cmd_batch ("aml-form",
817 : aml_form),
818 1 : TALER_TESTING_cmd_end ()
819 : };
820 :
821 : (void) cls;
822 1 : TALER_TESTING_run (is,
823 : commands);
824 1 : }
825 :
826 :
827 : int
828 1 : main (int argc,
829 : char *const *argv)
830 : {
831 : (void) argc;
832 1 : return TALER_TESTING_main (
833 : argv,
834 : "INFO",
835 : CONFIG_FILE,
836 : "exchange-account-2",
837 : TALER_TESTING_BS_FAKEBANK,
838 : &cred,
839 : &run,
840 : NULL);
841 : }
842 :
843 :
844 : /* end of test_kyc_api.c */
|