fix payto:// construction routine and move it to libtalerutil

This commit is contained in:
Christian Grothoff 2021-11-07 19:22:12 +01:00
parent f374a5cd38
commit 98c30bee88
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
3 changed files with 63 additions and 67 deletions

View File

@ -3979,42 +3979,15 @@ postgres_inselect_wallet_kyc_status (
{
struct PostgresClosure *pg = cls;
char *payto_uri;
char *rps;
unsigned int skip;
const char *extra = "";
int url_len;
enum GNUNET_DB_QueryStatus qs;
rps = GNUNET_STRINGS_data_to_string_alloc (reserve_pub,
sizeof (*reserve_pub));
skip = 0;
if (0 == strncasecmp (pg->exchange_url,
"http://",
strlen ("http://")))
skip = strlen ("http://");
if (0 == strncasecmp (pg->exchange_url,
"https://",
strlen ("https://")))
skip = strlen ("https://");
url_len = strlen (pg->exchange_url);
if ('/' == pg->exchange_url[url_len - 1])
url_len--;
url_len -= skip;
GNUNET_asprintf (&payto_uri,
"taler%s://reserve/%.*s/%s",
extra,
url_len,
pg->exchange_url + skip,
rps);
GNUNET_free (rps);
{
enum GNUNET_DB_QueryStatus qs;
qs = inselect_account_kyc_status (pg,
payto_uri,
kyc);
GNUNET_free (payto_uri);
return qs;
}
payto_uri = TALER_payto_from_reserve (pg->exchange_url,
reserve_pub);
qs = inselect_account_kyc_status (pg,
payto_uri,
kyc);
GNUNET_free (payto_uri);
return qs;
}

View File

@ -327,6 +327,19 @@ char *
TALER_payto_get_method (const char *payto_uri);
/**
* Construct a payto://-URI from a Taler @a reserve_pub at
* a @exchange_base_url
*
* @param exchange_base_url the URL of the exchange
* @param reserve_pub public key of the reserve
* @return payto:// URI encoding the reserve's address
*/
char *
TALER_payto_from_reserve (const char *exchange_base_url,
const struct TALER_ReservePublicKeyP *reserve_pub);
/**
* Obtain the account name from a payto URL.
*

View File

@ -70,13 +70,6 @@ payto_get_key (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)
{
@ -85,14 +78,6 @@ TALER_payto_get_subject (const char *payto_uri)
}
/**
* Obtain the payment method from a @a payto_uri. The
* format of a payto URI is 'payto://$METHOD/$SOMETHING'.
* We return $METHOD.
*
* @param payto_uri the URL to parse
* @return NULL on error (malformed @a payto_uri)
*/
char *
TALER_payto_get_method (const char *payto_uri)
{
@ -113,16 +98,6 @@ TALER_payto_get_method (const char *payto_uri)
}
/**
* Obtain the account name from a payto URL. The format
* of the @a payto URL is 'payto://x-taler-bank/$HOSTNAME/$ACCOUNT[?PARAMS]'.
* We check the first part matches, skip over the $HOSTNAME
* and return the $ACCOUNT portion.
*
* @param payto an x-taler-bank payto URL
* @return only the account name from the @a payto URL, NULL if not an x-taler-bank
* payto URL
*/
char *
TALER_xtalerbank_account_from_payto (const char *payto)
{
@ -202,13 +177,6 @@ validate_payto_iban (const char *account_url)
}
/**
* Check that a payto:// URI is well-formed.
*
* @param payto_uri the URL to check
* @return NULL on success, otherwise an error
* message to be freed by the caller!
*/
char *
TALER_payto_validate (const char *payto_uri)
{
@ -264,3 +232,45 @@ TALER_payto_hash (const char *payto,
strlen (payto) + 1,
&h_payto->hash);
}
char *
TALER_payto_from_reserve (const char *exchange_base_url,
const struct TALER_ReservePublicKeyP *reserve_pub)
{
char *payto_uri;
char *rps;
unsigned int skip;
const char *extra = "";
int url_len;
rps = GNUNET_STRINGS_data_to_string_alloc (reserve_pub,
sizeof (*reserve_pub));
skip = 0;
if (0 == strncasecmp (exchange_base_url,
"http://",
strlen ("http://")))
{
skip = strlen ("http://");
extra = "+http";
}
if (0 == strncasecmp (exchange_base_url,
"https://",
strlen ("https://")))
skip = strlen ("https://");
url_len = strlen (exchange_base_url);
if ('/' == exchange_base_url[url_len - 1])
url_len--;
url_len -= skip;
GNUNET_asprintf (&payto_uri,
"taler%s://reserve/%.*s/%s",
extra,
url_len,
exchange_base_url + skip,
rps);
GNUNET_free (rps);
return payto_uri;
}
/* end of payto.c */