-require receiver-name in iban payto URIs

This commit is contained in:
Christian Grothoff 2021-08-08 00:00:05 +02:00
parent 02992dd1e7
commit 0a0c167567
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 35 additions and 9 deletions

View File

@ -34,7 +34,7 @@ main (int argc,
json_t *wire_iban; json_t *wire_iban;
const char *payto_xtalerbank = "payto://x-taler-bank/42"; const char *payto_xtalerbank = "payto://x-taler-bank/42";
const char *payto_iban = const char *payto_iban =
"payto://iban/BIC-TO-BE-SKIPPED/DE89370400440532013000"; "payto://iban/BIC-TO-BE-SKIPPED/DE89370400440532013000?receiver-name=Test";
char *p_xtalerbank; char *p_xtalerbank;
char *p_iban; char *p_iban;

View File

@ -1,6 +1,6 @@
/* /*
This file is part of TALER This file is part of TALER
Copyright (C) 2019-2020 Taler Systems SA Copyright (C) 2019-2021 Taler Systems SA
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 General Public License as published by the Free Software terms of the GNU General Public License as published by the Free Software
@ -29,14 +29,16 @@
/** /**
* Extract the subject value from the URI parameters. * Extract the value under @a key from the URI parameters.
* *
* @param payto_uri the URL to parse * @param payto_uri the URL to parse
* @return NULL if the subject parameter is not found. * @param search_key key to look for, including "="
* @return NULL if the @a key parameter is not found.
* The caller should free the returned value. * The caller should free the returned value.
*/ */
char * static char *
TALER_payto_get_subject (const char *payto_uri) payto_get_key (const char *payto_uri,
const char *search_key)
{ {
const char *key; const char *key;
const char *value_start; const char *value_start;
@ -49,8 +51,8 @@ TALER_payto_get_subject (const char *payto_uri)
do { do {
if (0 == strncasecmp (++key, if (0 == strncasecmp (++key,
"subject", search_key,
strlen ("subject"))) strlen (search_key)))
{ {
value_start = strchr (key, value_start = strchr (key,
(unsigned char) '='); (unsigned char) '=');
@ -68,6 +70,21 @@ TALER_payto_get_subject (const char *payto_uri)
} }
/**
* Extract the subject value from the URI parameters.
*
* @param payto_uri the URL to parse
* @return NULL if the subject parameter is not found.
* The caller should free the returned value.
*/
char *
TALER_payto_get_subject (const char *payto_uri)
{
return payto_get_key (payto_uri,
"subject=");
}
/** /**
* Obtain the payment method from a @a payto_uri. The * Obtain the payment method from a @a payto_uri. The
* format of a payto URI is 'payto://$METHOD/$SOMETHING'. * format of a payto URI is 'payto://$METHOD/$SOMETHING'.
@ -432,7 +449,7 @@ validate_iban (const char *iban)
* Validate payto://iban/ account URL (only account information, * Validate payto://iban/ account URL (only account information,
* wire subject and amount are ignored). * wire subject and amount are ignored).
* *
* @param account_url URL to parse * @param account_url payto URL to parse
* @return NULL on success, otherwise an error message * @return NULL on success, otherwise an error message
* to be freed by the caller * to be freed by the caller
*/ */
@ -470,6 +487,15 @@ validate_payto_iban (const char *account_url)
return err; return err;
} }
GNUNET_free (result); GNUNET_free (result);
{
char *target;
target = payto_get_key (account_url,
"receiver-name=");
if (NULL == target)
return GNUNET_strdup ("'receiver-name' parameter missing");
GNUNET_free (target);
}
return NULL; return NULL;
} }