exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit 6588fb13b6db1b8bb1e970b0e9cdfa1545d09314
parent b45be8fd69052a93dbe92a6e6de8e537d8c82e8b
Author: Christian Grothoff <christian@grothoff.org>
Date:   Wed, 10 Jul 2024 10:06:06 +0200

-bump gana

Diffstat:
Msrc/include/taler_kyclogic_lib.h | 11+++++++++++
Msrc/kyclogic/kyclogic_api.c | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/src/include/taler_kyclogic_lib.h b/src/include/taler_kyclogic_lib.h @@ -458,6 +458,17 @@ TALER_KYCLOGIC_measure_to_requirement ( /** + * Lookup the provider for the given @a check_name. + * + * @param check_name check to lookup provider for + * @return NULL on error (@a check_name unknown or + * not a check that has a provider) + */ +const struct TALER_KYCLOGIC_KycProvider * +TALER_KYCLOGIC_check_to_provider (const char *check_name); + + +/** * Extract logic data from a KYC @a provider. * * @param provider provider to get logic data from diff --git a/src/kyclogic/kyclogic_api.c b/src/kyclogic/kyclogic_api.c @@ -2334,8 +2334,67 @@ TALER_KYCLOGIC_select_measure ( const char **prog_name, const json_t **context) { - // parse jmeasures - // check measure_index is valid (in bounds and of right type) + const json_t *jmeasure; + struct GNUNET_JSON_Specification spec[] = { + GNUNET_JSON_spec_array_const ("measures", + &jmeasures), + GNUNET_JSON_spec_end () + }; + struct GNUNET_JSON_Specification ispec[] = { + GNUNET_JSON_spec_string ("check_name", + check_name), + GNUNET_JSON_spec_string ("prog_name", + prog_name), + GNUNET_JSON_spec_object_const ("context", + context), + GNUNET_JSON_spec_end () + }; + + *check_name = NULL; + *prog_name = NULL; + *context = NULL; + if (GNUNET_OK != + GNUNET_JSON_parse (jmeasures, + spec, + NULL, NULL)) + { + GNUNET_break (0); + return TALER_EC_EXCHANGE_KYC_MEASURES_MALFORMED; + } + if (measure_index >= json_array_size (jmeasures)) + { + GNUNET_break_op (0); + return TALER_EC_EXCHANGE_KYC_MEASURES_INDEX_INVALID; + } + jmeasure = json_array_get (jmeasures, + measure_index); + if (GNUNET_OK != + GNUNET_JSON_parse (jmeasure, + ispec, + NULL, NULL)) + { + GNUNET_break (0); + return TALER_EC_EXCHANGE_KYC_MEASURES_MALFORMED; + } + return TALER_EC_NONE; +} + + +const struct TALER_KYCLOGIC_KycProvider * +TALER_KYCLOGIC_check_to_provider (const char *check_name) +{ + struct TALER_KYCLOGIC_KycCheck *kc; + + kc = find_check (check_name); + switch (kc->type) + { + case TALER_KYCLOGIC_CT_FORM: + case TALER_KYCLOGIC_CT_INFO: + return TALER_EC_EXCHANGE_KYC_INVALID_LOGIC_TO_CHECK; + case TALER_KYCLOGIC_CT_LINK: + break; + } + return kc->details.link.provider; }