handle base32-wire transfer subject being followed by space+exchange base url in wire plugin and fakebank

This commit is contained in:
Christian Grothoff 2017-05-15 15:53:21 +02:00
parent be3b891dbd
commit 7c28823caf
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
6 changed files with 45 additions and 13 deletions

View File

@ -512,8 +512,17 @@ handle_history (struct TALER_FAKEBANK_Handle *h,
continue; continue;
} }
subject = GNUNET_STRINGS_data_to_string_alloc (&pos->wtid, {
char *ws;
ws = GNUNET_STRINGS_data_to_string_alloc (&pos->wtid,
sizeof (pos->wtid)); sizeof (pos->wtid));
GNUNET_asprintf (&subject,
"%s %s",
ws,
pos->exchange_base_url);
GNUNET_free (ws);
}
trans = json_pack ("{s:I, s:o, s:o, s:s, s:I, s:s}", trans = json_pack ("{s:I, s:o, s:o, s:s, s:I, s:s}",
"row_id", (json_int_t) pos->serial_id, "row_id", (json_int_t) pos->serial_id,
"date", GNUNET_JSON_from_time_abs (pos->date), "date", GNUNET_JSON_from_time_abs (pos->date),

View File

@ -53,7 +53,7 @@ run (void *cls)
.details.admin_add_incoming.expected_response_code = MHD_HTTP_OK, .details.admin_add_incoming.expected_response_code = MHD_HTTP_OK,
.details.admin_add_incoming.credit_account_no = 1, .details.admin_add_incoming.credit_account_no = 1,
.details.admin_add_incoming.debit_account_no = 2, /* Ignored */ .details.admin_add_incoming.debit_account_no = 2, /* Ignored */
.details.admin_add_incoming.amount = "PUDOS:5.01" }, .details.admin_add_incoming.amount = "KUDOS:5.01" },
/* Move money from Exchange to Bank */ /* Move money from Exchange to Bank */
{ .oc = TBI_OC_ADMIN_ADD_INCOMING, { .oc = TBI_OC_ADMIN_ADD_INCOMING,
.label = "deposit-2", .label = "deposit-2",
@ -61,7 +61,7 @@ run (void *cls)
.details.admin_add_incoming.expected_response_code = MHD_HTTP_OK, .details.admin_add_incoming.expected_response_code = MHD_HTTP_OK,
.details.admin_add_incoming.credit_account_no = 1, .details.admin_add_incoming.credit_account_no = 1,
.details.admin_add_incoming.debit_account_no = 2, /* Ignored */ .details.admin_add_incoming.debit_account_no = 2, /* Ignored */
.details.admin_add_incoming.amount = "PUDOS:5.01" }, .details.admin_add_incoming.amount = "KUDOS:5.01" },
#if 0 #if 0
/* Ask Exchange's incoming history */ /* Ask Exchange's incoming history */
{ .oc = TBI_OC_HISTORY, { .oc = TBI_OC_HISTORY,

View File

@ -52,7 +52,7 @@ run (void *cls)
.details.admin_add_incoming.credit_account_no = 1, .details.admin_add_incoming.credit_account_no = 1,
.details.admin_add_incoming.debit_account_no = 2, .details.admin_add_incoming.debit_account_no = 2,
.details.admin_add_incoming.exchange_base_url = "https://exchange.net/", .details.admin_add_incoming.exchange_base_url = "https://exchange.net/",
.details.admin_add_incoming.amount = "PUDOS:5.01" }, .details.admin_add_incoming.amount = "KUDOS:5.01" },
/* Add EUR:3.21 to account 3 */ /* Add EUR:3.21 to account 3 */
{ .oc = TBI_OC_HISTORY, { .oc = TBI_OC_HISTORY,
.label = "history-1c", .label = "history-1c",
@ -72,14 +72,14 @@ run (void *cls)
.details.admin_add_incoming.credit_account_no = 3, .details.admin_add_incoming.credit_account_no = 3,
.details.admin_add_incoming.debit_account_no = 2, .details.admin_add_incoming.debit_account_no = 2,
.details.admin_add_incoming.exchange_base_url = "https://exchange.org/", .details.admin_add_incoming.exchange_base_url = "https://exchange.org/",
.details.admin_add_incoming.amount = "PUDOS:3.21" }, .details.admin_add_incoming.amount = "KUDOS:3.21" },
{ .oc = TBI_OC_ADMIN_ADD_INCOMING, { .oc = TBI_OC_ADMIN_ADD_INCOMING,
.label = "credit-2", .label = "credit-2",
.details.admin_add_incoming.expected_response_code = MHD_HTTP_OK, .details.admin_add_incoming.expected_response_code = MHD_HTTP_OK,
.details.admin_add_incoming.credit_account_no = 2, .details.admin_add_incoming.credit_account_no = 2,
.details.admin_add_incoming.debit_account_no = 3, .details.admin_add_incoming.debit_account_no = 3,
.details.admin_add_incoming.exchange_base_url = "https://exchange.org/", .details.admin_add_incoming.exchange_base_url = "https://exchange.org/",
.details.admin_add_incoming.amount = "PUDOS:3.22" }, .details.admin_add_incoming.amount = "KUDOS:3.22" },
{ .oc = TBI_OC_HISTORY, { .oc = TBI_OC_HISTORY,
.label = "history-2b", .label = "history-2b",
.details.history.account_number = 2, .details.history.account_number = 2,

View File

@ -323,9 +323,17 @@ build_history (struct InterpreterState *is,
/* h[total].execution_date; // unknown here */ /* h[total].execution_date; // unknown here */
h[total].serial_id h[total].serial_id
= pos->details.admin_add_incoming.serial_id; = pos->details.admin_add_incoming.serial_id;
h[total].details.wire_transfer_subject {
= GNUNET_STRINGS_data_to_string_alloc (&pos->details.admin_add_incoming.wtid, char *ws;
ws = GNUNET_STRINGS_data_to_string_alloc (&pos->details.admin_add_incoming.wtid,
sizeof (struct TALER_WireTransferIdentifierRawP)); sizeof (struct TALER_WireTransferIdentifierRawP));
GNUNET_asprintf (&h[total].details.wire_transfer_subject,
"%s %s",
ws,
pos->details.admin_add_incoming.exchange_base_url);
GNUNET_free (ws);
}
total++; total++;
} }
} }

View File

@ -200,7 +200,8 @@ struct TALER_BANK_TransferDetails
struct GNUNET_TIME_Absolute execution_date; struct GNUNET_TIME_Absolute execution_date;
/** /**
* Wire transfer subject * Wire transfer subject. Usually a reserve public key
* followed by the BASE URI of the exchange.
*/ */
char *wire_transfer_subject; char *wire_transfer_subject;

View File

@ -822,16 +822,29 @@ bhist_cb (void *cls,
if (MHD_HTTP_OK == http_status) if (MHD_HTTP_OK == http_status)
{ {
char *subject;
char *space;
wd.amount = details->amount; wd.amount = details->amount;
wd.execution_date = details->execution_date; wd.execution_date = details->execution_date;
subject = GNUNET_strdup (details->wire_transfer_subject);
space = strchr (subject, (int) ' ');
if (NULL != space)
{
/* Space separates the actual wire transfer subject from the
exchange base URL (if present, expected only for outgoing
transactions). So we cut the string off at the space. */
*space = '\0';
}
/* NOTE: For a real bank, the subject should include a checksum! */ /* NOTE: For a real bank, the subject should include a checksum! */
if (GNUNET_OK != if (GNUNET_OK !=
GNUNET_STRINGS_string_to_data (details->wire_transfer_subject, GNUNET_STRINGS_string_to_data (subject,
strlen (details->wire_transfer_subject), strlen (subject),
&wd.reserve_pub, &wd.reserve_pub,
sizeof (wd.reserve_pub))) sizeof (wd.reserve_pub)))
{ {
GNUNET_break (0); GNUNET_break (0);
GNUNET_free (subject);
/* NOTE: for a "real" bank, we would want to trigger logic to undo the /* NOTE: for a "real" bank, we would want to trigger logic to undo the
wire transfer. However, for the "demo" bank, it should currently wire transfer. However, for the "demo" bank, it should currently
be "impossible" to do wire transfers with invalid subjects, and be "impossible" to do wire transfers with invalid subjects, and
@ -839,6 +852,7 @@ bhist_cb (void *cls,
that nicely either right now). So we don't handle this case for now. */ that nicely either right now). So we don't handle this case for now. */
return; return;
} }
GNUNET_free (subject);
wd.account_details = details->account_details; wd.account_details = details->account_details;
if ( (NULL != whh->hres_cb) && if ( (NULL != whh->hres_cb) &&