This commit is contained in:
Christian Grothoff 2017-05-04 11:18:49 +02:00
parent 27c921c7c4
commit 405859d068
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
6 changed files with 73 additions and 2 deletions

View File

@ -162,6 +162,7 @@ handle_admin_add_incoming_finished (void *cls,
* to the operators of the bank. * to the operators of the bank.
* *
* @param ctx curl context for the event loop * @param ctx curl context for the event loop
* @param auth authentication data to send to the bank
* @param bank_base_url URL of the bank (used to execute this request) * @param bank_base_url URL of the bank (used to execute this request)
* @param exchange_base_url base URL of the exchange (for tracking) * @param exchange_base_url base URL of the exchange (for tracking)
* @param wtid wire transfer identifier for the transfer * @param wtid wire transfer identifier for the transfer
@ -176,6 +177,7 @@ handle_admin_add_incoming_finished (void *cls,
*/ */
struct TALER_BANK_AdminAddIncomingHandle * struct TALER_BANK_AdminAddIncomingHandle *
TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx, TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx,
const json_t *auth,
const char *bank_base_url, const char *bank_base_url,
const char *exchange_base_url, const char *exchange_base_url,
const struct TALER_WireTransferIdentifierRawP *wtid, const struct TALER_WireTransferIdentifierRawP *wtid,
@ -189,8 +191,9 @@ TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx,
json_t *admin_obj; json_t *admin_obj;
CURL *eh; CURL *eh;
admin_obj = json_pack ("{s:s, s:o, s:o, s:I, s:I}", admin_obj = json_pack ("{s:s, s:O, s:o, s:o, s:I, s:I}",
"exchange_url", exchange_base_url, "exchange_url", exchange_base_url,
"auth", auth,
"wtid", GNUNET_JSON_from_data_auto (wtid), "wtid", GNUNET_JSON_from_data_auto (wtid),
"amount", TALER_JSON_from_amount (amount), "amount", TALER_JSON_from_amount (amount),
"debit_account", (json_int_t) debit_account_no, "debit_account", (json_int_t) debit_account_no,

View File

@ -318,11 +318,13 @@ handle_mhd_request (void *cls,
t = GNUNET_new (struct Transaction); t = GNUNET_new (struct Transaction);
{ {
const char *base_url; const char *base_url;
json_t *auth;
struct GNUNET_JSON_Specification spec[] = { struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_fixed_auto ("wtid", &t->wtid), GNUNET_JSON_spec_fixed_auto ("wtid", &t->wtid),
GNUNET_JSON_spec_uint64 ("debit_account", &t->debit_account), GNUNET_JSON_spec_uint64 ("debit_account", &t->debit_account),
GNUNET_JSON_spec_uint64 ("credit_account", &t->credit_account), GNUNET_JSON_spec_uint64 ("credit_account", &t->credit_account),
TALER_JSON_spec_amount ("amount", &t->amount), TALER_JSON_spec_amount ("amount", &t->amount),
TALER_JSON_spec_json ("auth", &auth),
GNUNET_JSON_spec_string ("exchange_url", &base_url), GNUNET_JSON_spec_string ("exchange_url", &base_url),
GNUNET_JSON_spec_end () GNUNET_JSON_spec_end ()
}; };
@ -335,6 +337,10 @@ handle_mhd_request (void *cls,
json_decref (json); json_decref (json);
return MHD_NO; return MHD_NO;
} }
/* For now, we ignore authentication, this is the fakebank.
We may choose to support "proper" authentication once
it is non-trivial and actually needs to be tested. */
json_decref (auth);
t->exchange_base_url = GNUNET_strdup (base_url); t->exchange_base_url = GNUNET_strdup (base_url);
GNUNET_CONTAINER_DLL_insert (h->transactions_head, GNUNET_CONTAINER_DLL_insert (h->transactions_head,
h->transactions_tail, h->transactions_tail,

View File

@ -188,6 +188,7 @@ interpreter_run (void *cls)
struct TALER_WireTransferIdentifierRawP wtid; struct TALER_WireTransferIdentifierRawP wtid;
struct TALER_Amount amount; struct TALER_Amount amount;
const struct GNUNET_SCHEDULER_TaskContext *tc; const struct GNUNET_SCHEDULER_TaskContext *tc;
json_t *auth;
is->task = NULL; is->task = NULL;
tc = GNUNET_SCHEDULER_get_task_context (); tc = GNUNET_SCHEDULER_get_task_context ();
@ -219,8 +220,14 @@ interpreter_run (void *cls)
GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE, GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
&cmd->details.admin_add_incoming.wtid, &cmd->details.admin_add_incoming.wtid,
sizeof (cmd->details.admin_add_incoming.wtid)); sizeof (cmd->details.admin_add_incoming.wtid));
auth = json_pack ("{s:s, s:{s:s, s:s}}",
"type", "basic",
"data",
"username", "user",
"password", "pass");
cmd->details.admin_add_incoming.aih cmd->details.admin_add_incoming.aih
= TALER_BANK_admin_add_incoming (is->ctx, = TALER_BANK_admin_add_incoming (is->ctx,
auth,
"http://localhost:8081", "http://localhost:8081",
cmd->details.admin_add_incoming.exchange_base_url, cmd->details.admin_add_incoming.exchange_base_url,
&cmd->details.admin_add_incoming.wtid, &cmd->details.admin_add_incoming.wtid,
@ -229,6 +236,7 @@ interpreter_run (void *cls)
cmd->details.admin_add_incoming.credit_account_no, cmd->details.admin_add_incoming.credit_account_no,
&add_incoming_cb, &add_incoming_cb,
is); is);
json_decref (auth);
if (NULL == cmd->details.admin_add_incoming.aih) if (NULL == cmd->details.admin_add_incoming.aih)
{ {
GNUNET_break (0); GNUNET_break (0);

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER This file is part of TALER
Copyright (C) 2015, 2016 GNUnet e.V. Copyright (C) 2015, 2016, 2017 GNUnet e.V. & Inria
TALER is free software; you can redistribute it and/or modify it under the 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 terms of the GNU Affero General Public License as published by the Free Software
@ -57,6 +57,7 @@ typedef void
* to the operators of the bank. * to the operators of the bank.
* *
* @param ctx curl context for the event loop * @param ctx curl context for the event loop
* @param auth authentication data to send to the bank
* @param bank_base_url URL of the bank (used to execute this request) * @param bank_base_url URL of the bank (used to execute this request)
* @param exchange_base_url base URL of the exchange (for tracking) * @param exchange_base_url base URL of the exchange (for tracking)
* @param wtid wire transfer identifier for the transfer * @param wtid wire transfer identifier for the transfer
@ -71,6 +72,7 @@ typedef void
*/ */
struct TALER_BANK_AdminAddIncomingHandle * struct TALER_BANK_AdminAddIncomingHandle *
TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx, TALER_BANK_admin_add_incoming (struct GNUNET_CURL_Context *ctx,
const json_t *auth,
const char *bank_base_url, const char *bank_base_url,
const char *exchange_base_url, const char *exchange_base_url,
const struct TALER_WireTransferIdentifierRawP *wtid, const struct TALER_WireTransferIdentifierRawP *wtid,

View File

@ -45,6 +45,11 @@ struct TestClosure
*/ */
char *bank_uri; char *bank_uri;
/**
* Authentication information.
*/
json_t *auth;
/** /**
* Handle to the context for sending funds to the bank. * Handle to the context for sending funds to the bank.
*/ */
@ -721,6 +726,7 @@ test_execute_wire_transfer (void *cls,
eh->cc = cc; eh->cc = cc;
eh->cc_cls = cc_cls; eh->cc_cls = cc_cls;
eh->aaih = TALER_BANK_admin_add_incoming (tc->ctx, eh->aaih = TALER_BANK_admin_add_incoming (tc->ctx,
tc->auth,
tc->bank_uri, tc->bank_uri,
exchange_base_url, exchange_base_url,
&bf.wtid, &bf.wtid,
@ -773,6 +779,8 @@ libtaler_plugin_wire_test_init (void *cls)
struct GNUNET_CONFIGURATION_Handle *cfg = cls; struct GNUNET_CONFIGURATION_Handle *cfg = cls;
struct TestClosure *tc; struct TestClosure *tc;
struct TALER_WIRE_Plugin *plugin; struct TALER_WIRE_Plugin *plugin;
char *user;
char *pass;
tc = GNUNET_new (struct TestClosure); tc = GNUNET_new (struct TestClosure);
if (NULL != cfg) if (NULL != cfg)
@ -815,6 +823,40 @@ libtaler_plugin_wire_test_init (void *cls)
GNUNET_free (tc); GNUNET_free (tc);
return NULL; return NULL;
} }
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"exchange-wire-outgoing-test",
"USERNAME",
&user))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"exchange-wire-outgoing-test",
"USERNAME");
GNUNET_free (tc->bank_uri);
GNUNET_free (tc);
return NULL;
}
if (GNUNET_OK !=
GNUNET_CONFIGURATION_get_value_string (cfg,
"exchange-wire-outgoing-test",
"PASSWORD",
&pass))
{
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
"exchange-wire-outgoing-test",
"PASSWORD");
GNUNET_free (tc->bank_uri);
GNUNET_free (tc);
GNUNET_free (user);
return NULL;
}
tc->auth = json_pack ("{s:s, s:{s:s, s:s}}",
"type", "basic",
"data",
"username", user,
"password", pass);
GNUNET_free (user);
GNUNET_free (pass);
tc->ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule, tc->ctx = GNUNET_CURL_init (&GNUNET_CURL_gnunet_scheduler_reschedule,
&tc->rc); &tc->rc);
tc->rc = GNUNET_CURL_gnunet_rc_create (tc->ctx); tc->rc = GNUNET_CURL_gnunet_rc_create (tc->ctx);
@ -823,6 +865,7 @@ libtaler_plugin_wire_test_init (void *cls)
GNUNET_break (0); GNUNET_break (0);
GNUNET_free (tc->currency); GNUNET_free (tc->currency);
GNUNET_free (tc->bank_uri); GNUNET_free (tc->bank_uri);
json_decref (tc->auth);
GNUNET_free (tc); GNUNET_free (tc);
return NULL; return NULL;
} }
@ -863,6 +906,11 @@ libtaler_plugin_wire_test_done (void *cls)
GNUNET_CURL_gnunet_rc_destroy (tc->rc); GNUNET_CURL_gnunet_rc_destroy (tc->rc);
tc->rc = NULL; tc->rc = NULL;
} }
if (NULL != tc->auth)
{
json_decref (tc->auth);
tc->auth = NULL;
}
GNUNET_free_non_null (tc->currency); GNUNET_free_non_null (tc->currency);
GNUNET_free_non_null (tc->bank_uri); GNUNET_free_non_null (tc->bank_uri);
GNUNET_free (tc); GNUNET_free (tc);

View File

@ -20,3 +20,7 @@ EXCHANGE_ACCOUNT_NUMBER = 2
# the URI of the bank (where the /admin/add/incoming API # the URI of the bank (where the /admin/add/incoming API
# is avaialble). # is avaialble).
# BANK_URI = https://bank.demo.taler.net/ # BANK_URI = https://bank.demo.taler.net/
# Authentication information for basic authentication
USERNAME = user
PASSWORD = pass