payto fixes WIP

This commit is contained in:
Florian Dold 2020-01-17 01:23:32 +01:00
parent c677720e7b
commit 6faf6fc732
No known key found for this signature in database
GPG Key ID: D2E4F00F29D02A4B
10 changed files with 99 additions and 15 deletions

@ -1 +1 @@
Subproject commit 934a6a18301e81c4fd1b3a8cda2dc13dca4741cc Subproject commit ca53235ccfa0458ebf11c204888ca370e20ec3f5

View File

@ -1842,8 +1842,7 @@ process_credits (void *cls)
"Starting bank CREDIT history of account `%s'\n", "Starting bank CREDIT history of account `%s'\n",
wa->section_name); wa->section_name);
wa->chh = TALER_BANK_credit_history (ctx, wa->chh = TALER_BANK_credit_history (ctx,
wa->account.details.x_taler_bank. wa->auth.wire_gateway_url,
account_base_url,
&wa->auth, &wa->auth,
wa->in_wire_off, wa->in_wire_off,
INT64_MAX, INT64_MAX,

View File

@ -98,16 +98,50 @@ TALER_BANK_auth_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
{ NULL, TALER_BANK_AUTH_NONE } { NULL, TALER_BANK_AUTH_NONE }
}; };
char *method; char *method;
unsigned long long fakebank_port;
if (GNUNET_OK ==
GNUNET_CONFIGURATION_get_value_number (cfg,
section,
"FAKEBANK_PORT",
&fakebank_port))
{
auth->method = TALER_BANK_AUTH_FAKEBANK;
auth->details.fakebank.fb_port = (uint16_t) fakebank_port;
// FIXME: we should not hardcode exchange account number "2"
GNUNET_asprintf (&auth->wire_gateway_url,
"http://localhost:%u/2/",
(unsigned int) fakebank_port);
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Using fakebank %s on port %u\n",
auth->wire_gateway_url,
(unsigned int) fakebank_port);
return GNUNET_OK;
}
if (GNUNET_OK != if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg, GNUNET_CONFIGURATION_get_value_string (cfg,
section, section,
"TALER_BANK_AUTH_METHOD", "WIRE_GATEWAY_URL",
&auth->wire_gateway_url))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
section,
"WIRE_GATEWAY_URL");
return GNUNET_SYSERR;
}
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
section,
"WIRE_GATEWAY_AUTH_METHOD",
&method)) &method))
{ {
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
section, section,
"TALER_BANK_AUTH_METHOD"); "WIRE_GATEWAY_AUTH_METHOD");
GNUNET_free (auth->wire_gateway_url);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
for (unsigned int i = 0; NULL != methods[i].m; i++) for (unsigned int i = 0; NULL != methods[i].m; i++)
@ -132,6 +166,7 @@ TALER_BANK_auth_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
section, section,
"USERNAME"); "USERNAME");
GNUNET_free (method); GNUNET_free (method);
GNUNET_free (auth->wire_gateway_url);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
if (GNUNET_OK != if (GNUNET_OK !=
@ -146,11 +181,14 @@ TALER_BANK_auth_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
section, section,
"PASSWORD"); "PASSWORD");
GNUNET_free (method); GNUNET_free (method);
GNUNET_free (auth->wire_gateway_url);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
auth->method = TALER_BANK_AUTH_BASIC; auth->method = TALER_BANK_AUTH_BASIC;
GNUNET_free (method); GNUNET_free (method);
return GNUNET_OK; return GNUNET_OK;
case TALER_BANK_AUTH_FAKEBANK:
GNUNET_assert (0);
} }
} }
} }
@ -184,7 +222,10 @@ TALER_BANK_auth_free (struct TALER_BANK_AuthenticationData *auth)
auth->details.basic.password = NULL; auth->details.basic.password = NULL;
} }
break; break;
case TALER_BANK_AUTH_FAKEBANK:
break;
} }
GNUNET_free (auth->wire_gateway_url);
} }

View File

@ -1783,8 +1783,7 @@ wire_prepare_cb (void *cls,
} }
wa = wpd->wa; wa = wpd->wa;
wpd->eh = TALER_BANK_execute_wire_transfer (ctx, wpd->eh = TALER_BANK_execute_wire_transfer (ctx,
wa->account.details.x_taler_bank. wa->auth.wire_gateway_url,
account_base_url,
&wa->auth, &wa->auth,
buf, buf,
buf_size, buf_size,

View File

@ -537,8 +537,7 @@ find_transfers (void *cls)
current_batch_size = 0; current_batch_size = 0;
hh = TALER_BANK_credit_history (ctx, hh = TALER_BANK_credit_history (ctx,
wa_pos->account.details.x_taler_bank. wa_pos->auth.wire_gateway_url,
account_base_url,
&wa_pos->auth, &wa_pos->auth,
last_row_off, last_row_off,
batch_size, batch_size,

View File

@ -42,7 +42,12 @@ enum TALER_BANK_AuthenticationMethod
/** /**
* Basic authentication with cleartext username and password. * Basic authentication with cleartext username and password.
*/ */
TALER_BANK_AUTH_BASIC TALER_BANK_AUTH_BASIC,
/**
* The authentication data refers to a fakebank.
*/
TALER_BANK_AUTH_FAKEBANK,
}; };
@ -52,6 +57,12 @@ enum TALER_BANK_AuthenticationMethod
struct TALER_BANK_AuthenticationData struct TALER_BANK_AuthenticationData
{ {
/**
* Base URL we use to talk to the wire gateway,
* which talks to the bank for us.
*/
char *wire_gateway_url;
/** /**
* Which authentication method should we use? * Which authentication method should we use?
*/ */
@ -79,6 +90,14 @@ struct TALER_BANK_AuthenticationData
char *password; char *password;
} basic; } basic;
struct
{
/**
* Port that the fakebank runs on.
*/
uint16_t fb_port;
} fakebank;
} details; } details;
}; };

View File

@ -71,6 +71,7 @@ METHOD = x-taler-bank
[account-2] [account-2]
# What is the bank account (with the "Taler Bank" demo system)? # What is the bank account (with the "Taler Bank" demo system)?
URL = "payto://x-taler-bank/localhost:8082/2" URL = "payto://x-taler-bank/localhost:8082/2"
FAKEBANK_PORT = 8082
# This is the response we give out for the /wire request. It provides # This is the response we give out for the /wire request. It provides
# wallets with the bank information for transfers to the exchange. # wallets with the bank information for transfers to the exchange.

View File

@ -140,7 +140,7 @@ main (int argc,
TALER_LOG_DEBUG ("Running against the Fakebank.\n"); TALER_LOG_DEBUG ("Running against the Fakebank.\n");
if (GNUNET_OK != if (GNUNET_OK !=
TALER_TESTING_prepare_fakebank (CONFIG_FILE, TALER_TESTING_prepare_fakebank (CONFIG_FILE,
"account-1", "account-2",
&bc)) &bc))
{ {
GNUNET_break (0); GNUNET_break (0);

View File

@ -1,8 +1,9 @@
[taler] [taler]
currency = KUDOS currency = KUDOS
[account-1] [account-2]
URL = payto://x-taler-bank/localhost:8081/1 URL = payto://x-taler-bank/localhost:8081/2
FAKEBANK_PORT = 8081
[bank] [bank]
SERVE = http SERVE = http

View File

@ -380,11 +380,30 @@ TALER_TESTING_prepare_fakebank (const char *config_filename,
{ {
struct GNUNET_CONFIGURATION_Handle *cfg; struct GNUNET_CONFIGURATION_Handle *cfg;
char *payto_url; char *payto_url;
uint16_t fakebank_port;
cfg = GNUNET_CONFIGURATION_create (); cfg = GNUNET_CONFIGURATION_create ();
if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg, if (GNUNET_OK != GNUNET_CONFIGURATION_load (cfg,
config_filename)) config_filename))
return GNUNET_SYSERR; return GNUNET_SYSERR;
if (GNUNET_OK !=
TALER_BANK_auth_parse_cfg (cfg,
"account-" EXCHANGE_ACCOUNT_NAME,
&bc->exchange_auth))
{
GNUNET_break (0);
GNUNET_CONFIGURATION_destroy (cfg);
return GNUNET_SYSERR;
}
GNUNET_assert (TALER_BANK_AUTH_FAKEBANK == bc->exchange_auth.method);
fakebank_port = bc->exchange_auth.details.fakebank.fb_port;
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Fakebank port from config: %u\n",
(unsigned int) fakebank_port);
if (GNUNET_OK != if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg, GNUNET_CONFIGURATION_get_value_string (cfg,
config_section, config_section,
@ -418,10 +437,16 @@ TALER_TESTING_prepare_fakebank (const char *config_filename,
GNUNET_free (payto_url); GNUNET_free (payto_url);
return GNUNET_SYSERR; return GNUNET_SYSERR;
} }
bc->exchange_account_url GNUNET_asprintf (&bc->exchange_account_url,
= TALER_xtalerbank_account_url_from_payto (payto_url); "http://localhost:%u/%s/",
fakebank_port,
EXCHANGE_ACCOUNT_NAME);
GNUNET_assert (NULL != bc->exchange_account_url); GNUNET_assert (NULL != bc->exchange_account_url);
GNUNET_log (GNUNET_ERROR_TYPE_INFO, "fakebank account URL: %s\n",
bc->exchange_account_url);
GNUNET_free (payto_url); GNUNET_free (payto_url);
/* Now we know it's the fake bank, for purpose of authentication, we
* don't have any auth. */
bc->exchange_auth.method = TALER_BANK_AUTH_NONE; bc->exchange_auth.method = TALER_BANK_AUTH_NONE;
bc->exchange_payto = TALER_payto_xtalerbank_make (bc->bank_url, "2"); bc->exchange_payto = TALER_payto_xtalerbank_make (bc->bank_url, "2");
bc->user42_payto = TALER_payto_xtalerbank_make (bc->bank_url, "42"); bc->user42_payto = TALER_payto_xtalerbank_make (bc->bank_url, "42");