From 0a0c1675675498d2a384001c3d007fca2c6329cd Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Sun, 8 Aug 2021 00:00:05 +0200 Subject: -require receiver-name in iban payto URIs --- src/json/test_json_wire.c | 2 +- src/util/payto.c | 42 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 35 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/json/test_json_wire.c b/src/json/test_json_wire.c index f9264c61c..b417b25fe 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 7819184e8..b8fd2e43a 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) '='); @@ -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 * 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, * 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; } -- cgit v1.2.3