summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-08-08 00:00:05 +0200
committerChristian Grothoff <christian@grothoff.org>2021-08-08 00:01:07 +0200
commit0a0c1675675498d2a384001c3d007fca2c6329cd (patch)
treeaf15bf12709d5b149468fa0bc87c38e85061a36d /src
parent02992dd1e73f925be5720f9af0d2ee2b43c3ed99 (diff)
downloadexchange-0a0c1675675498d2a384001c3d007fca2c6329cd.tar.gz
exchange-0a0c1675675498d2a384001c3d007fca2c6329cd.tar.bz2
exchange-0a0c1675675498d2a384001c3d007fca2c6329cd.zip
-require receiver-name in iban payto URIs
Diffstat (limited to 'src')
-rw-r--r--src/json/test_json_wire.c2
-rw-r--r--src/util/payto.c42
2 files changed, 35 insertions, 9 deletions
diff --git a/src/json/test_json_wire.c b/src/json/test_json_wire.c
index f9264c61..b417b25f 100644
--- a/src/json/test_json_wire.c
+++ b/src/json/test_json_wire.c
@@ -34,7 +34,7 @@ main (int argc,
json_t *wire_iban;
const char *payto_xtalerbank = "payto://x-taler-bank/42";
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_iban;
diff --git a/src/util/payto.c b/src/util/payto.c
index 7819184e..b8fd2e43 100644
--- a/src/util/payto.c
+++ b/src/util/payto.c
@@ -1,6 +1,6 @@
/*
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
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
- * @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.
*/
-char *
-TALER_payto_get_subject (const char *payto_uri)
+static char *
+payto_get_key (const char *payto_uri,
+ const char *search_key)
{
const char *key;
const char *value_start;
@@ -49,8 +51,8 @@ TALER_payto_get_subject (const char *payto_uri)
do {
if (0 == strncasecmp (++key,
- "subject",
- strlen ("subject")))
+ search_key,
+ strlen (search_key)))
{
value_start = strchr (key,
(unsigned char) '=');
@@ -69,6 +71,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
* format of a payto URI is 'payto://$METHOD/$SOMETHING'.
* We return $METHOD.
@@ -432,7 +449,7 @@ validate_iban (const char *iban)
* Validate payto://iban/ account URL (only account information,
* 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
* to be freed by the caller
*/
@@ -470,6 +487,15 @@ validate_payto_iban (const char *account_url)
return err;
}
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;
}