restructure configuration, move bank account credentials from exchange-account-XXX to exchange-accountcredentials-XXX

This commit is contained in:
Christian Grothoff 2021-08-03 21:58:36 +02:00
parent 06676e72cb
commit ba3f70390a
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
25 changed files with 449 additions and 430 deletions

View File

@ -73,6 +73,8 @@ CURRENCY_ROUND_UNIT = TESTKUDOS:0.01
PAYTO_URI = payto://x-taler-bank/localhost/Exchange
enable_debit = yes
enable_credit = yes
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange

View File

@ -68,14 +68,9 @@ struct WireAccount
struct WireAccount *prev;
/**
* Authentication data for the account.
* Account details.
*/
struct TALER_BANK_AuthenticationData auth;
/**
* Name of the section that configures this account.
*/
char *section_name;
const struct TALER_EXCHANGEDB_AccountInfo *ai;
/**
* Active wire request for the transaction history.
@ -107,16 +102,6 @@ struct WireAccount
*/
uint64_t out_wire_off;
/**
* We should check for inbound transactions to this account.
*/
int watch_credit;
/**
* We should check for outbound transactions from this account.
*/
int watch_debit;
/**
* Return value when we got this account's progress point.
*/
@ -573,8 +558,6 @@ do_shutdown (void *cls)
GNUNET_CONTAINER_DLL_remove (wa_head,
wa_tail,
wa);
TALER_BANK_auth_free (&wa->auth);
GNUNET_free (wa->section_name);
GNUNET_free (wa);
}
if (NULL != ctx)
@ -587,6 +570,8 @@ do_shutdown (void *cls)
GNUNET_CURL_gnunet_rc_destroy (rc);
rc = NULL;
}
TALER_EXCHANGEDB_unload_accounts ();
TALER_ARL_cfg = NULL;
}
@ -688,28 +673,28 @@ commit (enum GNUNET_DB_QueryStatus qs)
NULL != wa;
wa = wa->next)
{
GNUNET_assert (0 ==
json_array_append_new (
report_account_progress,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("account",
wa->section_name),
GNUNET_JSON_pack_uint64 ("start_reserve_in",
wa->start_pp.
last_reserve_in_serial_id),
GNUNET_JSON_pack_uint64 ("end_reserve_in",
wa->pp.last_reserve_in_serial_id),
GNUNET_JSON_pack_uint64 ("start_wire_out",
wa->start_pp.
last_wire_out_serial_id),
GNUNET_JSON_pack_uint64 ("end_wire_out",
wa->pp.last_wire_out_serial_id))));
GNUNET_assert (
0 ==
json_array_append_new (
report_account_progress,
GNUNET_JSON_PACK (
GNUNET_JSON_pack_string ("account",
wa->ai->section_name),
GNUNET_JSON_pack_uint64 ("start_reserve_in",
wa->start_pp.last_reserve_in_serial_id),
GNUNET_JSON_pack_uint64 ("end_reserve_in",
wa->pp.last_reserve_in_serial_id),
GNUNET_JSON_pack_uint64 ("start_wire_out",
wa->start_pp.
last_wire_out_serial_id),
GNUNET_JSON_pack_uint64 ("end_wire_out",
wa->pp.last_wire_out_serial_id))));
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == wa->qsx)
qs = TALER_ARL_adb->update_wire_auditor_account_progress (
TALER_ARL_adb->cls,
TALER_ARL_asession,
&TALER_ARL_master_pub,
wa->section_name,
wa->ai->section_name,
&wa->pp,
wa->in_wire_off,
wa->out_wire_off);
@ -718,7 +703,7 @@ commit (enum GNUNET_DB_QueryStatus qs)
TALER_ARL_adb->cls,
TALER_ARL_asession,
&TALER_ARL_master_pub,
wa->section_name,
wa->ai->section_name,
&wa->pp,
wa->in_wire_off,
wa->out_wire_off);
@ -893,7 +878,7 @@ check_for_required_transfers (void)
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
@ -1016,7 +1001,7 @@ wire_out_cb (void *cls,
GNUNET_JSON_pack_string ("diagnostic",
"wire transfer not made (yet?)"),
GNUNET_JSON_pack_string ("account_section",
wa->section_name)));
wa->ai->section_name)));
TALER_ARL_amount_add (&total_bad_amount_out_minus,
&total_bad_amount_out_minus,
amount);
@ -1050,7 +1035,7 @@ wire_out_cb (void *cls,
GNUNET_JSON_pack_string ("target",
payto_uri),
GNUNET_JSON_pack_string ("account_section",
wa->section_name)));
wa->ai->section_name)));
TALER_ARL_amount_add (&total_bad_amount_out_plus,
&total_bad_amount_out_plus,
&roi->details.amount);
@ -1072,7 +1057,7 @@ wire_out_cb (void *cls,
roi->details.
credit_account_url),
GNUNET_JSON_pack_string ("account_section",
wa->section_name)));
wa->ai->section_name)));
TALER_ARL_amount_add (&total_bad_amount_out_minus,
&total_bad_amount_out_minus,
amount);
@ -1099,7 +1084,7 @@ wire_out_cb (void *cls,
GNUNET_JSON_pack_string ("diagnostic",
"wire amount does not match"),
GNUNET_JSON_pack_string ("account_section",
wa->section_name)));
wa->ai->section_name)));
if (0 < TALER_amount_cmp (amount,
&roi->details.amount))
{
@ -1156,9 +1141,9 @@ struct CheckMatchContext
const struct ReserveOutInfo *roi;
/**
* Set to #GNUNET_YES if we found a match.
* Set to true if we found a match.
*/
int found;
bool found;
};
@ -1188,7 +1173,7 @@ check_rc_matches (void *cls,
rc->rowid,
rc->execution_date,
ctx->roi->details.execution_date);
ctx->found = GNUNET_YES;
ctx->found = true;
free_rc (NULL,
key,
rc);
@ -1218,7 +1203,7 @@ complain_out_not_found (void *cls,
struct GNUNET_HashCode rkey;
struct CheckMatchContext ctx = {
.roi = roi,
.found = GNUNET_NO
.found = false
};
(void) key;
@ -1229,7 +1214,7 @@ complain_out_not_found (void *cls,
&rkey,
&check_rc_matches,
&ctx);
if (GNUNET_YES == ctx.found)
if (ctx.found)
return GNUNET_OK;
TALER_ARL_report (report_wire_out_inconsistencies,
GNUNET_JSON_PACK (
@ -1245,7 +1230,7 @@ complain_out_not_found (void *cls,
roi->details.
execution_date),
GNUNET_JSON_pack_string ("account_section",
wa->section_name),
wa->ai->section_name),
GNUNET_JSON_pack_string ("diagnostic",
"justification for wire transfer not found")));
TALER_ARL_amount_add (&total_bad_amount_out_plus,
@ -1279,18 +1264,18 @@ check_exchange_wire_out (struct WireAccount *wa)
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing exchange's wire OUT table for account `%s'\n",
wa->section_name);
wa->ai->section_name);
qs = TALER_ARL_edb->select_wire_out_above_serial_id_by_account (
TALER_ARL_edb->cls,
TALER_ARL_esession,
wa->section_name,
wa->ai->section_name,
wa->pp.last_wire_out_serial_id,
&wire_out_cb,
wa);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
@ -1338,11 +1323,11 @@ history_debit_cb (void *cls,
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Error fetching debit history of account %s: %u/%u!\n",
wa->section_name,
wa->ai->section_name,
http_status_code,
(unsigned int) ec);
commit (GNUNET_DB_STATUS_HARD_ERROR);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return GNUNET_SYSERR;
}
@ -1412,7 +1397,7 @@ process_debits (void *cls)
/* skip accounts where DEBIT is not enabled */
while ( (NULL != wa) &&
(GNUNET_NO == wa->watch_debit) )
(GNUNET_NO == wa->ai->debit_enabled) )
wa = wa->next;
if (NULL == wa)
{
@ -1423,10 +1408,10 @@ process_debits (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Checking bank DEBIT records of account `%s'\n",
wa->section_name);
wa->ai->section_name);
GNUNET_assert (NULL == wa->dhh);
wa->dhh = TALER_BANK_debit_history (ctx,
&wa->auth,
wa->ai->auth,
wa->out_wire_off,
INT64_MAX,
&history_debit_cb,
@ -1435,9 +1420,9 @@ process_debits (void *cls)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to obtain bank transaction history for `%s'\n",
wa->section_name);
wa->ai->section_name);
commit (GNUNET_DB_STATUS_HARD_ERROR);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
@ -1577,7 +1562,7 @@ complain_in_not_found (void *cls,
rii->details.
execution_date),
GNUNET_JSON_pack_string ("account",
wa->section_name),
wa->ai->section_name),
GNUNET_JSON_pack_string ("diagnostic",
"incoming wire transfer claimed by exchange not found")));
TALER_ARL_amount_add (&total_bad_amount_in_minus,
@ -1629,19 +1614,19 @@ history_credit_cb (void *cls,
if (TALER_EC_NONE != ec)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Error fetching credit history of account %s: %u/%u!\n",
wa->section_name,
"Error fetching credit history of account %s: %u/%s!\n",
wa->ai->section_name,
http_status,
(unsigned int) ec);
TALER_ErrorCode_get_hint (ec));
commit (GNUNET_DB_STATUS_HARD_ERROR);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return GNUNET_SYSERR;
}
/* end of operation */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Reconciling CREDIT processing of account `%s'\n",
wa->section_name);
wa->ai->section_name);
GNUNET_CONTAINER_multihashmap_iterate (in_map,
&complain_in_not_found,
wa);
@ -1825,7 +1810,7 @@ process_credits (void *cls)
/* skip accounts where CREDIT is not enabled */
while ( (NULL != wa) &&
(GNUNET_NO == wa->watch_credit) )
(GNUNET_NO == wa->ai->credit_enabled) )
wa = wa->next;
if (NULL == wa)
{
@ -1835,27 +1820,27 @@ process_credits (void *cls)
}
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Analyzing exchange's wire IN table for account `%s'\n",
wa->section_name);
wa->ai->section_name);
qs = TALER_ARL_edb->select_reserves_in_above_serial_id_by_account (
TALER_ARL_edb->cls,
TALER_ARL_esession,
wa->section_name,
wa->ai->section_name,
wa->pp.last_reserve_in_serial_id,
&reserve_in_cb,
wa);
if (0 > qs)
{
GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Starting bank CREDIT history of account `%s'\n",
wa->section_name);
wa->ai->section_name);
wa->chh = TALER_BANK_credit_history (ctx,
&wa->auth,
wa->ai->auth,
wa->in_wire_off,
INT64_MAX,
&history_credit_cb,
@ -1865,7 +1850,7 @@ process_credits (void *cls)
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to obtain bank transaction history\n");
commit (GNUNET_DB_STATUS_HARD_ERROR);
global_ret = 1;
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
return;
}
@ -2005,7 +1990,7 @@ begin_transaction (void)
TALER_ARL_adb->cls,
TALER_ARL_asession,
&TALER_ARL_master_pub,
wa->section_name,
wa->ai->section_name,
&wa->pp,
&wa->in_wire_off,
&wa->out_wire_off);
@ -2074,31 +2059,14 @@ process_account_cb (void *cls,
struct WireAccount *wa;
(void) cls;
if ( (GNUNET_NO == ai->debit_enabled) &&
(GNUNET_NO == ai->credit_enabled) )
if ( (! ai->debit_enabled) &&
(! ai->credit_enabled) )
return; /* not an active exchange account */
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Found exchange account `%s'\n",
ai->section_name);
wa = GNUNET_new (struct WireAccount);
wa->section_name = GNUNET_strdup (ai->section_name);
wa->watch_debit = ai->debit_enabled;
wa->watch_credit = ai->credit_enabled;
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (TALER_ARL_cfg,
ai->section_name,
&wa->auth))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to access bank account `%s'\n",
wa->section_name);
GNUNET_break (0);
GNUNET_free (wa->section_name);
GNUNET_free (wa);
global_ret = 1;
GNUNET_SCHEDULER_shutdown ();
return;
}
wa->ai = ai;
GNUNET_CONTAINER_DLL_insert (wa_head,
wa_tail,
wa);
@ -2127,7 +2095,7 @@ run (void *cls,
if (GNUNET_OK !=
TALER_ARL_init (c))
{
global_ret = 1;
global_ret = EXIT_FAILURE;
return;
}
if (GNUNET_OK !=
@ -2136,7 +2104,7 @@ run (void *cls,
"TINY_AMOUNT",
&tiny_amount))
{
global_ret = 1;
global_ret = EXIT_NOTCONFIGURED;
return;
}
GNUNET_SCHEDULER_add_shutdown (&do_shutdown,
@ -2147,6 +2115,7 @@ run (void *cls,
if (NULL == ctx)
{
GNUNET_break (0);
global_ret = EXIT_FAILURE;
return;
}
reserve_closures = GNUNET_CONTAINER_multihashmap_create (1024,
@ -2198,13 +2167,24 @@ run (void *cls,
GNUNET_assert (GNUNET_OK ==
TALER_amount_set_zero (TALER_ARL_currency,
&zero));
TALER_EXCHANGEDB_find_accounts (TALER_ARL_cfg,
&process_account_cb,
if (GNUNET_OK !=
TALER_EXCHANGEDB_load_accounts (TALER_ARL_cfg,
TALER_EXCHANGEDB_ALO_DEBIT
| TALER_EXCHANGEDB_ALO_CREDIT
| TALER_EXCHANGEDB_ALO_AUTHDATA))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No bank accounts configured\n");
global_ret = EXIT_NOTCONFIGURED;
GNUNET_SCHEDULER_shutdown ();
}
TALER_EXCHANGEDB_find_accounts (&process_account_cb,
NULL);
if (GNUNET_DB_STATUS_SUCCESS_NO_RESULTS !=
begin_transaction ())
{
global_ret = 1;
GNUNET_break (0);
global_ret = EXIT_FAILURE;
GNUNET_SCHEDULER_shutdown ();
}
}
@ -2246,7 +2226,7 @@ main (int argc,
if (GNUNET_OK !=
GNUNET_STRINGS_get_utf8_args (argc, argv,
&argc, &argv))
return 4;
return EXIT_INVALIDARGUMENT;
ret = GNUNET_PROGRAM_run (
argc,
argv,
@ -2258,9 +2238,9 @@ main (int argc,
NULL);
GNUNET_free_nz ((void *) argv);
if (GNUNET_SYSERR == ret)
return 3;
return EXIT_INVALIDARGUMENT;
if (GNUNET_NO == ret)
return 0;
return EXIT_SUCCESS;
return global_ret;
}

View File

@ -7,6 +7,8 @@ BASE_URL = http://localhost:8083/
PAYTO_URI = payto://x-taler-bank/localhost/Exchange
enable_debit = yes
enable_credit = yes
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:8082/taler-wire-gateway/Exchange/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange

View File

@ -56,6 +56,10 @@ USER_PAYTO_URI = payto://x-taler-bank/localhost:8082/42
[exchange-account-2]
# What is the payto://-URL of the exchange (to generate wire response)
PAYTO_URI = "payto://x-taler-bank/localhost:8082/Exchange"
enable_debit = YES
enable_credit = YES
[exchange-accountcredentials-2]
# What is the bank account (with the "Taler Bank" demo system)? Must end with "/".
WIRE_GATEWAY_URL = http://localhost:8082/Exchange/
# Authentication information for basic authentication
@ -63,8 +67,6 @@ WIRE_GATEWAY_AUTH_METHOD = "basic"
username = Exchange
password = x
enable_debit = YES
enable_credit = YES

View File

@ -56,6 +56,10 @@ USER_PAYTO_URI = payto://x-taler-bank/localhost:8082/42
[exchange-account-2]
# What is the payto://-URL of the exchange (to generate wire response)
PAYTO_URI = "payto://x-taler-bank/localhost:8082/Exchange"
enable_debit = YES
enable_credit = YES
[exchange-accountcredentials-2]
# What is the bank account (with the "Taler Bank" demo system)? Must end with "/".
WIRE_GATEWAY_URL = http://localhost:8082/taler-wire-gateway/Exchange/
# Authentication information for basic authentication
@ -63,8 +67,6 @@ WIRE_GATEWAY_AUTH_METHOD = "basic"
username = Exchange
password = x
enable_debit = YES
enable_credit = YES

View File

@ -1,6 +1,6 @@
/*
This file is part of TALER
Copyright (C) 2016-2020 Taler Systems SA
Copyright (C) 2016-2021 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero General Public License as published by the Free Software
@ -87,7 +87,7 @@ struct AggregationUnit
* Exchange wire account to be used for the preparation and
* eventual execution of the aggregate wire transfer.
*/
struct TALER_EXCHANGEDB_WireAccount *wa;
const struct TALER_EXCHANGEDB_AccountInfo *wa;
/**
* Database session for all of our transactions.
@ -262,7 +262,8 @@ parse_wirewatch_config (void)
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
TALER_EXCHANGEDB_load_accounts (cfg))
TALER_EXCHANGEDB_load_accounts (cfg,
TALER_EXCHANGEDB_ALO_DEBIT))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No wire accounts configured for debit!\n");

View File

@ -158,7 +158,8 @@ parse_wirewatch_config (void)
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
TALER_EXCHANGEDB_load_accounts (cfg))
TALER_EXCHANGEDB_load_accounts (cfg,
TALER_EXCHANGEDB_ALO_DEBIT))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No wire accounts configured for debit!\n");
@ -236,7 +237,7 @@ expired_reserve_cb (void *cls,
struct TALER_Amount closing_fee;
int ret;
enum GNUNET_DB_QueryStatus qs;
struct TALER_EXCHANGEDB_WireAccount *wa;
const struct TALER_EXCHANGEDB_AccountInfo *wa;
/* NOTE: potential optimization: use custom SQL API to not
fetch this: */

View File

@ -50,7 +50,7 @@ struct WirePrepareData
/**
* Wire account used for this preparation.
*/
struct TALER_EXCHANGEDB_WireAccount *wa;
const struct TALER_EXCHANGEDB_AccountInfo *wa;
/**
* Row ID of the transfer.
@ -179,7 +179,9 @@ parse_wirewatch_config (void)
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
TALER_EXCHANGEDB_load_accounts (cfg))
TALER_EXCHANGEDB_load_accounts (cfg,
TALER_EXCHANGEDB_ALO_DEBIT
| TALER_EXCHANGEDB_ALO_AUTHDATA))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No wire accounts configured for debit!\n");
@ -353,7 +355,7 @@ wire_prepare_cb (void *cls,
const char *buf,
size_t buf_size)
{
struct TALER_EXCHANGEDB_WireAccount *wa;
const struct TALER_EXCHANGEDB_AccountInfo *wa;
(void) cls;
if ( (NULL == wire_method) ||
@ -382,7 +384,7 @@ wire_prepare_cb (void *cls,
}
wa = wpd->wa;
wpd->eh = TALER_BANK_transfer (ctx,
&wa->auth,
wa->auth,
buf,
buf_size,
&wire_confirm_cb,

View File

@ -52,9 +52,9 @@ struct WireAccount
struct WireAccount *prev;
/**
* Name of the section that configures this account.
* Information about this account.
*/
char *section_name;
const struct TALER_EXCHANGEDB_AccountInfo *ai;
/**
* Database session we are using for the current transaction.
@ -66,11 +66,6 @@ struct WireAccount
*/
struct TALER_BANK_CreditHistoryHandle *hh;
/**
* Authentication data.
*/
struct TALER_BANK_AuthenticationData auth;
/**
* Until when is processing this wire plugin delayed?
*/
@ -233,8 +228,6 @@ shutdown_task (void *cls)
GNUNET_CONTAINER_DLL_remove (wa_head,
wa_tail,
wa);
TALER_BANK_auth_free (&wa->auth);
GNUNET_free (wa->section_name);
GNUNET_free (wa->job_name);
GNUNET_free (wa);
}
@ -258,6 +251,8 @@ shutdown_task (void *cls)
}
TALER_EXCHANGEDB_plugin_unload (db_plugin);
db_plugin = NULL;
TALER_EXCHANGEDB_unload_accounts ();
cfg = NULL;
}
@ -275,21 +270,10 @@ add_account_cb (void *cls,
struct WireAccount *wa;
(void) cls;
if (GNUNET_YES != ai->credit_enabled)
if (! ai->credit_enabled)
return; /* not enabled for us, skip */
wa = GNUNET_new (struct WireAccount);
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
ai->section_name,
&wa->auth))
{
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
"Failed to load account `%s'\n",
ai->section_name);
GNUNET_free (wa);
return;
}
wa->section_name = GNUNET_strdup (ai->section_name);
wa->ai = ai;
GNUNET_asprintf (&wa->job_name,
"wirewatch-%s",
ai->section_name);
@ -325,20 +309,24 @@ exchange_serve_process_config (void)
if (NULL ==
(db_plugin = TALER_EXCHANGEDB_plugin_load (cfg)))
{
fprintf (stderr,
"Failed to initialize DB subsystem\n");
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Failed to initialize DB subsystem\n");
return GNUNET_SYSERR;
}
TALER_EXCHANGEDB_find_accounts (cfg,
&add_account_cb,
NULL);
if (NULL == wa_head)
if (GNUNET_OK !=
TALER_EXCHANGEDB_load_accounts (cfg,
TALER_EXCHANGEDB_ALO_CREDIT
| TALER_EXCHANGEDB_ALO_AUTHDATA))
{
fprintf (stderr,
"No wire accounts configured for credit!\n");
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No wire accounts configured for credit!\n");
TALER_EXCHANGEDB_plugin_unload (db_plugin);
db_plugin = NULL;
return GNUNET_SYSERR;
}
TALER_EXCHANGEDB_find_accounts (&add_account_cb,
NULL);
GNUNET_assert (NULL != wa_head);
return GNUNET_OK;
}
@ -558,7 +546,7 @@ history_cb (void *cls,
&details->amount,
details->execution_date,
details->debit_account_url,
wa->section_name,
wa->ai->section_name,
serial_id);
switch (qs)
{
@ -683,7 +671,7 @@ find_transfers (void *cls)
GNUNET_assert (NULL == wa_pos->hh);
wa_pos->latest_row_off = wa_pos->batch_start;
wa_pos->hh = TALER_BANK_credit_history (ctx,
&wa_pos->auth,
wa_pos->ai->auth,
wa_pos->batch_start,
limit,
&history_cb,

View File

@ -62,6 +62,8 @@ CONFIG = "postgres:///talercheck"
PAYTO_URI = "payto://x-taler-bank/localhost:8082/3"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange
PASSWORD = x

View File

@ -64,6 +64,8 @@ CONFIG = "postgres:///talercheck"
PAYTO_URI = "payto://x-taler-bank/localhost:8082/3"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
TALER_BANK_AUTH_METHOD = NONE

View File

@ -1,6 +1,6 @@
/*
This file is part of TALER
Copyright (C) 2018 Taler Systems SA
Copyright (C) 2018-2021 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
@ -23,150 +23,76 @@
/**
* Head of list of wire accounts of the exchange.
* Information we keep for each supported account of the exchange.
*/
static struct TALER_EXCHANGEDB_WireAccount *wa_head;
/**
* Tail of list of wire accounts of the exchange.
*/
static struct TALER_EXCHANGEDB_WireAccount *wa_tail;
/**
* Closure of #check_for_account.
*/
struct FindAccountContext
struct WireAccount
{
/**
* Configuration we are using.
* Accounts are kept in a DLL.
*/
const struct GNUNET_CONFIGURATION_Handle *cfg;
struct WireAccount *next;
/**
* Callback to invoke.
* Plugins are kept in a DLL.
*/
TALER_EXCHANGEDB_AccountCallback cb;
struct WireAccount *prev;
/**
* Closure for @e cb.
* Externally visible account information.
*/
void *cb_cls;
struct TALER_EXCHANGEDB_AccountInfo ai;
/**
* Set to #GNUNET_SYSERR if the configuration is invalid.
* Authentication data. Only parsed if
* #TALER_EXCHANGEDB_ALO_AUTHDATA was set.
*/
int res;
struct TALER_BANK_AuthenticationData auth;
/**
* Name of the section that configures this account.
*/
char *section_name;
/**
* Name of the wire method underlying the account.
*/
char *method;
};
/**
* Check if @a section begins with "exchange-account-", and if so if the
* "PAYTO_URI" is given. If not, a warning is printed, otherwise we also check
* if "ENABLE_CREDIT" or "ENABLE_DEBIT" options are set to "YES" and then call
* the callback in @a cls with all of the information gathered.
*
* @param cls our `struct FindAccountContext`
* @param section name of a section in the configuration
* Head of list of wire accounts of the exchange.
*/
static void
check_for_account (void *cls,
const char *section)
{
struct FindAccountContext *ctx = cls;
char *method;
char *payto_uri;
if (0 != strncasecmp (section,
"exchange-account-",
strlen ("exchange-account-")))
return;
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (ctx->cfg,
section,
"PAYTO_URI",
&payto_uri))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_WARNING,
section,
"PAYTO_URI");
ctx->res = GNUNET_SYSERR;
return;
}
method = TALER_payto_get_method (payto_uri);
if (NULL == method)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"payto URI in config ([%s]/PAYTO_URI) malformed\n",
section);
ctx->res = GNUNET_SYSERR;
GNUNET_free (payto_uri);
return;
}
{
struct TALER_EXCHANGEDB_AccountInfo ai = {
.section_name = section,
.method = method,
.debit_enabled = (GNUNET_YES ==
GNUNET_CONFIGURATION_get_value_yesno (
ctx->cfg,
section,
"ENABLE_DEBIT")),
.credit_enabled = (GNUNET_YES ==
GNUNET_CONFIGURATION_get_value_yesno (ctx->cfg,
section,
"ENABLE_CREDIT"))
};
ctx->cb (ctx->cb_cls,
&ai);
}
GNUNET_free (payto_uri);
GNUNET_free (method);
}
static struct WireAccount *wa_head;
/**
* Parse the configuration to find account information.
*
* @param cfg configuration to use
* @param cb callback to invoke
* @param cb_cls closure for @a cb
* @return #GNUNET_OK if the configuration seems valid, #GNUNET_SYSERR if not
* Tail of list of wire accounts of the exchange.
*/
int
TALER_EXCHANGEDB_find_accounts (const struct GNUNET_CONFIGURATION_Handle *cfg,
TALER_EXCHANGEDB_AccountCallback cb,
static struct WireAccount *wa_tail;
void
TALER_EXCHANGEDB_find_accounts (TALER_EXCHANGEDB_AccountCallback cb,
void *cb_cls)
{
struct FindAccountContext ctx = {
.cfg = cfg,
.cb = cb,
.cb_cls = cb_cls,
.res = GNUNET_OK
};
GNUNET_CONFIGURATION_iterate_sections (cfg,
&check_for_account,
&ctx);
return ctx.res;
for (struct WireAccount *wa = wa_head;
NULL != wa;
wa = wa->next)
cb (cb_cls,
&wa->ai);
}
/**
* Find the wire plugin for the given payto:// URL
*
* @param method wire method we need an account for
* @return NULL on error
*/
struct TALER_EXCHANGEDB_WireAccount *
const struct TALER_EXCHANGEDB_AccountInfo *
TALER_EXCHANGEDB_find_account_by_method (const char *method)
{
for (struct TALER_EXCHANGEDB_WireAccount *wa = wa_head; NULL != wa; wa =
wa->next)
for (struct WireAccount *wa = wa_head;
NULL != wa;
wa = wa->next)
if (0 == strcmp (method,
wa->method))
return wa;
return &wa->ai;
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"No wire account known for method `%s'\n",
method);
@ -174,17 +100,11 @@ TALER_EXCHANGEDB_find_account_by_method (const char *method)
}
/**
* Find the wire plugin for the given payto:// URL
*
* @param url wire address we need an account for
* @return NULL on error
*/
struct TALER_EXCHANGEDB_WireAccount *
const struct TALER_EXCHANGEDB_AccountInfo *
TALER_EXCHANGEDB_find_account_by_payto_uri (const char *url)
{
char *method;
struct TALER_EXCHANGEDB_WireAccount *wa;
const struct TALER_EXCHANGEDB_AccountInfo *ai;
method = TALER_payto_get_method (url);
if (NULL == method)
@ -194,107 +114,177 @@ TALER_EXCHANGEDB_find_account_by_payto_uri (const char *url)
url);
return NULL;
}
wa = TALER_EXCHANGEDB_find_account_by_method (method);
ai = TALER_EXCHANGEDB_find_account_by_method (method);
GNUNET_free (method);
return wa;
return ai;
}
/**
* Closure for #add_account_cb().
*/
struct LoaderContext
{
/**
* Configuration to use.
*/
const struct GNUNET_CONFIGURATION_Handle *cfg;
/**
* true if we are to load the authentication data
* for the access to the bank account.
*/
bool load_auth_data;
/**
* Load accounts enabled for CREDIT.
*/
bool credit;
/**
* Load accounts enabled for DEBIT.
*/
bool debit;
/**
* Loader status (set by callback).
*/
enum GNUNET_GenericReturnValue res;
};
/**
* Function called with information about a wire account. Adds
* the account to our list.
*
* @param cls closure, a `struct GNUNET_CONFIGURATION_Handle`
* @param cls closure, a `struct LoaderContext`
* @param ai account information
*/
static void
add_account_cb (void *cls,
const struct TALER_EXCHANGEDB_AccountInfo *ai)
const char *section)
{
const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
struct TALER_EXCHANGEDB_WireAccount *wa;
struct LoaderContext *lc = cls;
const struct GNUNET_CONFIGURATION_Handle *cfg = lc->cfg;
struct WireAccount *wa;
char *payto_uri;
char *method;
bool debit;
bool credit;
(void) cls;
if (GNUNET_YES != ai->debit_enabled)
if (0 != strncasecmp (section,
"exchange-account-",
strlen ("exchange-account-")))
return;
debit = (GNUNET_YES ==
GNUNET_CONFIGURATION_get_value_yesno (lc->cfg,
section,
"ENABLE_DEBIT"));
credit = (GNUNET_YES ==
GNUNET_CONFIGURATION_get_value_yesno (lc->cfg,
section,
"ENABLE_CREDIT"));
if (! ( ( (debit) &&
(lc->debit) ) ||
( (credit) &&
(lc->credit) ) ) )
return; /* not enabled for us, skip */
wa = GNUNET_new (struct TALER_EXCHANGEDB_WireAccount);
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
ai->section_name,
section,
"PAYTO_URI",
&payto_uri))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
ai->section_name,
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_WARNING,
section,
"PAYTO_URI");
GNUNET_free (wa);
return;
}
wa->method = TALER_payto_get_method (payto_uri);
if (NULL == wa->method)
{
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
ai->section_name,
"PAYTO_URI",
"could not obtain wire method from URI");
GNUNET_free (wa);
lc->res = GNUNET_SYSERR;
return;
}
method = TALER_payto_get_method (payto_uri);
GNUNET_free (payto_uri);
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
ai->section_name,
&wa->auth))
if (NULL == method)
{
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
"Failed to load exchange account `%s'\n",
ai->section_name);
GNUNET_free (wa->method);
GNUNET_free (wa);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"payto URI in config ([%s]/PAYTO_URI) malformed\n",
section);
lc->res = GNUNET_SYSERR;
return;
}
wa->section_name = GNUNET_strdup (ai->section_name);
wa = GNUNET_new (struct WireAccount);
wa->section_name = GNUNET_strdup (section);
wa->method = method;
wa->ai.debit_enabled = debit;
wa->ai.credit_enabled = credit;
wa->ai.auth = NULL;
wa->ai.section_name = wa->section_name;
wa->ai.method = wa->method;
if (lc->load_auth_data)
{
char *csn;
GNUNET_asprintf (&csn,
"exchange-accountcredentials-%s",
&section[strlen ("exchange-account-")]);
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
csn,
&wa->auth))
{
GNUNET_log (GNUNET_ERROR_TYPE_MESSAGE,
"Failed to load exchange account credentials from section `%s'\n",
csn);
GNUNET_free (csn);
GNUNET_free (wa->section_name);
GNUNET_free (wa->method);
GNUNET_free (wa);
return;
}
wa->ai.auth = &wa->auth;
GNUNET_free (csn);
}
GNUNET_CONTAINER_DLL_insert (wa_head,
wa_tail,
wa);
}
/**
* Load account information opf the exchange from
* @a cfg.
*
* @param cfg configuration to load from
* @return #GNUNET_OK on success, #GNUNET_NO if no accounts are configured
*/
int
TALER_EXCHANGEDB_load_accounts (const struct GNUNET_CONFIGURATION_Handle *cfg)
enum GNUNET_GenericReturnValue
TALER_EXCHANGEDB_load_accounts (
const struct GNUNET_CONFIGURATION_Handle *cfg,
enum TALER_EXCHANGEDB_AccountLoaderOptions options)
{
TALER_EXCHANGEDB_find_accounts (cfg,
&add_account_cb,
(void *) cfg);
struct LoaderContext lc = {
.cfg = cfg,
.debit = 0 != (options & TALER_EXCHANGEDB_ALO_DEBIT),
.credit = 0 != (options & TALER_EXCHANGEDB_ALO_CREDIT),
.load_auth_data = 0 != (options & TALER_EXCHANGEDB_ALO_AUTHDATA),
};
GNUNET_CONFIGURATION_iterate_sections (cfg,
&add_account_cb,
&lc);
if (GNUNET_SYSERR == lc.res)
return GNUNET_SYSERR;
if (NULL == wa_head)
return GNUNET_NO;
return GNUNET_OK;
}
/**
* Free resources allocated by
* #TALER_EXCHANGEDB_load_accounts().
*/
void
TALER_EXCHANGEDB_unload_accounts (void)
{
struct TALER_EXCHANGEDB_WireAccount *wa;
struct WireAccount *wa;
while (NULL != (wa = wa_head))
{
GNUNET_CONTAINER_DLL_remove (wa_head,
wa_tail,
wa);
TALER_BANK_auth_free (&wa->auth);
if (NULL != wa->ai.auth)
TALER_BANK_auth_free (&wa->auth);
GNUNET_free (wa->section_name);
GNUNET_free (wa->method);
GNUNET_free (wa);

View File

@ -52,6 +52,12 @@ TALER_EXCHANGEDB_plugin_unload (struct TALER_EXCHANGEDB_Plugin *plugin);
*/
struct TALER_EXCHANGEDB_AccountInfo
{
/**
* Authentication data. Only parsed if
* #TALER_EXCHANGEDB_ALO_AUTHDATA was set.
*/
const struct TALER_BANK_AuthenticationData *auth;
/**
* Section in the configuration file that specifies the
* account. Must start with "exchange-account-".
@ -64,46 +70,21 @@ struct TALER_EXCHANGEDB_AccountInfo
const char *method;
/**
* #GNUNET_YES if this account is enabed to be debited
* true if this account is enabed to be debited
* by the taler-exchange-aggregator.
*/
int debit_enabled;
bool debit_enabled;
/**
* #GNUNET_YES if this account is enabed to be credited by wallets
* true if this account is enabed to be credited by wallets
* and needs to be watched by the taler-exchange-wirewatch.
* Also, the account will only be included in /wire if credit
* is enabled.
*/
int credit_enabled;
bool credit_enabled;
};
/**
* Function called with information about a wire account.
*
* @param cls closure
* @param ai account information
*/
typedef void
(*TALER_EXCHANGEDB_AccountCallback)(
void *cls,
const struct TALER_EXCHANGEDB_AccountInfo *ai);
/**
* Parse the configuration to find account information.
*
* @param cfg configuration to use
* @param cb callback to invoke
* @param cb_cls closure for @a cb
* @return #GNUNET_OK if the configuration seems valid, #GNUNET_SYSERR if not
*/
int
TALER_EXCHANGEDB_find_accounts (const struct GNUNET_CONFIGURATION_Handle *cfg,
TALER_EXCHANGEDB_AccountCallback cb,
void *cb_cls);
/**
* Calculate the total value of all transactions performed.
* Stores @a off plus the cost of all transactions in @a tl
@ -121,39 +102,28 @@ TALER_EXCHANGEDB_calculate_transaction_list_totals (
struct TALER_Amount *ret);
/* ***************** convenience functions ******** */
/**
* Function called with information about a wire account.
*
* @param cls closure
* @param ai account information
*/
typedef void
(*TALER_EXCHANGEDB_AccountCallback)(
void *cls,
const struct TALER_EXCHANGEDB_AccountInfo *ai);
/**
* Information we keep for each supported account of the exchange.
* Return information about all accounts that
* were loaded by #TALER_EXCHANGEDB_load_accounts().
*
* @param cb callback to invoke
* @param cb_cls closure for @a cb
*/
struct TALER_EXCHANGEDB_WireAccount
{
/**
* Accounts are kept in a DLL.
*/
struct TALER_EXCHANGEDB_WireAccount *next;
/**
* Plugins are kept in a DLL.
*/
struct TALER_EXCHANGEDB_WireAccount *prev;
/**
* Authentication data.
*/
struct TALER_BANK_AuthenticationData auth;
/**
* Name of the section that configures this account.
*/
char *section_name;
/**
* Name of the wire method underlying the account.
*/
char *method;
};
void
TALER_EXCHANGEDB_find_accounts (TALER_EXCHANGEDB_AccountCallback cb,
void *cb_cls);
/**
@ -164,7 +134,7 @@ struct TALER_EXCHANGEDB_WireAccount
* @param method wire method we need an account for
* @return NULL on error
*/
struct TALER_EXCHANGEDB_WireAccount *
const struct TALER_EXCHANGEDB_AccountInfo *
TALER_EXCHANGEDB_find_account_by_method (const char *method);
@ -176,19 +146,48 @@ TALER_EXCHANGEDB_find_account_by_method (const char *method);
* @param url wire address we need an account for
* @return NULL on error
*/
struct TALER_EXCHANGEDB_WireAccount *
const struct TALER_EXCHANGEDB_AccountInfo *
TALER_EXCHANGEDB_find_account_by_payto_uri (const char *url);
/**
* Options for #TALER_EXCHANGEDB_load_accounts()
*/
enum TALER_EXCHANGEDB_AccountLoaderOptions
{
TALER_EXCHANGEDB_ALO_NONE = 0,
/**
* Load accounts enabled for DEBITs.
*/
TALER_EXCHANGEDB_ALO_DEBIT = 1,
/**
* Load accounts enabled for CREDITs.
*/
TALER_EXCHANGEDB_ALO_CREDIT = 2,
/**
* Load authentication data from the
* "taler-accountcredentials-" section
* to access the account at the bank.
*/
TALER_EXCHANGEDB_ALO_AUTHDATA = 4
};
/**
* Load account information opf the exchange from
* @a cfg.
*
* @param cfg configuration to load from
* @param options loader options
* @return #GNUNET_OK on success, #GNUNET_NO if no accounts are configured
*/
int
TALER_EXCHANGEDB_load_accounts (const struct GNUNET_CONFIGURATION_Handle *cfg);
enum GNUNET_GenericReturnValue
TALER_EXCHANGEDB_load_accounts (
const struct GNUNET_CONFIGURATION_Handle *cfg,
enum TALER_EXCHANGEDB_AccountLoaderOptions options);
/**

View File

@ -70,13 +70,15 @@ LEGAL_RESERVE_EXPIRATION_TIME = 7 years
# What is the account URL?
PAYTO_URI = "payto://x-taler-bank/localhost/2"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:8082/2/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange
PASSWORD = x
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
TALER_BANK_AUTH_METHOD = NONE
[bank]
HTTP_PORT = 8082

View File

@ -56,17 +56,16 @@ BASE_URL = "http://localhost:8083/"
PORT = 8083
[exchange-account-1]
# What is the account URL?
PAYTO_URI = "payto://x-taler-bank/localhost/2"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:8082/2/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange
PASSWORD = x
PLUGIN = "taler_bank"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
TALER_BANK_AUTH_METHOD = NONE
[bank]
HTTP_PORT = 8082

View File

@ -57,6 +57,8 @@ CONFIG = "postgres:///talercheck"
[exchange-account-1]
# What is the URL of our account?
PAYTO_URI = "payto://x-taler-bank/localhost/42"
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:8082/42/"
[bank]
@ -66,17 +68,18 @@ HTTP_PORT = 8082
[exchange-account-2]
# What is the bank account (with the "Taler Bank" demo system)?
WIRE_GATEWAY_URL = "http://localhost:8082/2/"
PAYTO_URI = "payto://x-taler-bank/localhost/2"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
# Authentication information for basic authentication
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = "http://localhost:8082/2/"
WIRE_GATEWAY_AUTH_METHOD = "basic"
USERNAME = user
PASSWORD = pass
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
# Sections starting with "coin_" specify which denominations

View File

@ -216,10 +216,11 @@ main (int argc,
TALER_LOG_DEBUG ("Running with Nexus.\n");
with_libeufin = GNUNET_YES;
cfgfile = CONFIG_FILE_NEXUS;
if (GNUNET_OK != TALER_TESTING_prepare_nexus (CONFIG_FILE_NEXUS,
GNUNET_YES,
"exchange-account-2",
&bc))
if (GNUNET_OK !=
TALER_TESTING_prepare_nexus (CONFIG_FILE_NEXUS,
GNUNET_YES,
"exchange-account-2",
&bc))
{
GNUNET_break (0);
return 77;

View File

@ -5,6 +5,8 @@ currency = KUDOS
[exchange-account-2]
PAYTO_URI = payto://x-taler-bank/localhost/2
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = "http://localhost:8081/2/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange

View File

@ -5,7 +5,8 @@ currency = KUDOS
[exchange-account-2]
PAYTO_URI = payto://iban/BIC/ES9121000418450200051332?receiver-name=Exchange
METHOD = iban
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = http://localhost:5001/facades/my-facade/taler/
WIRE_GATEWAY_AUTH_METHOD = basic
# the exchange authenticates as the 'admin' user,

View File

@ -5,7 +5,8 @@ currency = KUDOS
[exchange-account-2]
PAYTO_URI = payto://x-taler-bank/localhost/Exchange
METHOD = x-taler-bank
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = "http://localhost:8081/taler-wire-gateway/Exchange/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange

View File

@ -18,31 +18,26 @@ UNIXPATH = /tmp/taler-service-twister.sock
UNIX_MATCH_UID = NO
UNIX_MATCH_GID = YES
[auditor]
BASE_URL = "http://localhost:8083/"
[taler]
currency = KUDOS
[bank]
serve = http
http_port = 8081
database = postgres:///talercheck
[exchange-account-1]
PAYTO_URI = payto://x-taler-bank/localhost/1
[exchange-account-2]
PAYTO_URI = payto://x-taler-bank/localhost/Exchange
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = "http://localhost:8888/taler-wire-gateway/Exchange/"
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange
PASSWORD = x
[bank]
HTTP_PORT = 8081

View File

@ -57,18 +57,22 @@ CONFIG = "postgres:///talercheck"
[exchange-account-1]
# What is the URL of our account?
PAYTO_URI = "payto://x-taler-bank/localhost/42"
WIRE_GATEWAY_URL = "http://localhost:9081/42/"
# ENABLE_CREDIT = YES
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:9081/42/"
[exchange-account-2]
# What is the bank account (with the "Taler Bank" demo system)?
PAYTO_URI = "payto://x-taler-bank/localhost/2"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-2]
WIRE_GATEWAY_AUTH_METHOD = basic
USERNAME = Exchange
PASSWORD = x
WIRE_GATEWAY_URL = "http://localhost:9081/2/"
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[bank]
HTTP_PORT = 9081

View File

@ -57,18 +57,22 @@ CONFIG = "postgres:///talercheck"
[exchange-account-1]
PAYTO_URI = payto://x-taler-bank/localhost/42
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:9082/42/"
[exchange-account-2]
PAYTO_URI = payto://x-taler-bank/localhost/2
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = "http://localhost:9082/2/"
# Authentication information for basic authentication
TALER_BANK_AUTH_METHOD = "basic"
USERNAME = user
PASSWORD = pass
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[bank]
HTTP_PORT=8082

View File

@ -49,17 +49,21 @@ CONFIG = "postgres:///talercheck"
[exchange-account-1]
# What is the URL of our account?
PAYTO_URI = "payto://x-taler-bank/localhost/42"
[exchange-accountcredentials-1]
WIRE_GATEWAY_URL = "http://localhost:9081/42/"
WIRE_GATEWAY_AUTH_METHOD = NONE
[exchange-account-2]
PAYTO_URI = payto://x-taler-bank/localhost/2
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[exchange-accountcredentials-2]
WIRE_GATEWAY_URL = "http://localhost:8082/2/"
WIRE_GATEWAY_AUTH_METHOD = BASIC
USERNAME = user
PASSWORD = pass
ENABLE_DEBIT = YES
ENABLE_CREDIT = YES
[bank]
HTTP_PORT = 8082

View File

@ -292,10 +292,14 @@ TALER_TESTING_prepare_nexus (const char *config_filename,
char *database = NULL; // silence compiler
char *exchange_payto_uri;
GNUNET_assert (0 ==
strncasecmp (config_section,
"exchange-account-",
strlen ("exchange-account-")));
cfg = GNUNET_CONFIGURATION_create ();
if (GNUNET_OK !=
GNUNET_CONFIGURATION_load (cfg, config_filename))
GNUNET_CONFIGURATION_load (cfg,
config_filename))
{
GNUNET_CONFIGURATION_destroy (cfg);
GNUNET_break (0);
@ -357,14 +361,25 @@ TALER_TESTING_prepare_nexus (const char *config_filename,
}
}
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
config_section,
&bc->exchange_auth))
{
GNUNET_break (0);
GNUNET_CONFIGURATION_destroy (cfg);
return GNUNET_SYSERR;
char *csn;
GNUNET_asprintf (&csn,
"exchange-accountcredentials-%s",
&config_section[strlen ("exchange-account-")]);
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
csn,
&bc->exchange_auth))
{
GNUNET_break (0);
GNUNET_CONFIGURATION_destroy (cfg);
GNUNET_free (csn);
return GNUNET_SYSERR;
}
GNUNET_free (csn);
}
GNUNET_CONFIGURATION_destroy (cfg);
bc->exchange_payto = exchange_payto_uri;
@ -400,10 +415,15 @@ TALER_TESTING_prepare_bank (const char *config_filename,
char *database;
char *exchange_payto_uri;
GNUNET_assert (0 ==
strncasecmp (config_section,
"exchange-account-",
strlen ("exchange-account-")));
cfg = GNUNET_CONFIGURATION_create ();
if (GNUNET_OK !=
GNUNET_CONFIGURATION_load (cfg, config_filename))
GNUNET_CONFIGURATION_load (cfg,
config_filename))
{
GNUNET_CONFIGURATION_destroy (cfg);
GNUNET_break (0);
@ -522,14 +542,24 @@ TALER_TESTING_prepare_bank (const char *config_filename,
}
GNUNET_OS_process_destroy (dbreset_proc);
}
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
config_section,
&bc->exchange_auth))
{
GNUNET_break (0);
GNUNET_CONFIGURATION_destroy (cfg);
return GNUNET_SYSERR;
char *csn;
GNUNET_asprintf (&csn,
"exchange-accountcredentials-%s",
&config_section[strlen ("exchange-account-")]);
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
csn,
&bc->exchange_auth))
{
GNUNET_break (0);
GNUNET_free (csn);
GNUNET_CONFIGURATION_destroy (cfg);
return GNUNET_SYSERR;
}
GNUNET_free (csn);
}
GNUNET_CONFIGURATION_destroy (cfg);
bc->exchange_payto = exchange_payto_uri;