donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit a59e61a140b246dc75c2017630635b8731de83cb
parent fa32efcd5c7aff8be7bebca785279d7289edc019
Author: Christian Grothoff <christian@grothoff.org>
Date:   Wed,  6 Mar 2024 11:27:32 +0100

create private key in testing CMD

Diffstat:
Msrc/include/donau_service.h | 4++--
Msrc/include/donau_testing_lib.h | 26++++++++++++++------------
Msrc/testing/testing_api_cmd_charity_post.c | 95++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------
3 files changed, 86 insertions(+), 39 deletions(-)

diff --git a/src/include/donau_service.h b/src/include/donau_service.h @@ -1035,12 +1035,12 @@ struct DONAU_CharityRequest /** * name of the charity */ - char *name; + const char *name; /** * URL */ - char *charity_url; + const char *charity_url; /** * max donation amount per year diff --git a/src/include/donau_testing_lib.h b/src/include/donau_testing_lib.h @@ -23,7 +23,7 @@ * @author Christian Grothoff <christian@grothoff.org> * @author Marcello Stanisci * @author Lukas Matyja - * + * */ #ifndef DONAU_TESTING_LIB_H #define DONAU_TESTING_LIB_H @@ -32,7 +32,6 @@ #include "donau_service.h" - /** * Connects to the exchange. * @@ -47,7 +46,7 @@ struct TALER_TESTING_Command TALER_TESTING_cmd_get_donau ( const char *label, const struct GNUNET_CONFIGURATION_Handle *cfg, - //const char *last_keys_ref, + // const char *last_keys_ref, bool wait_for_keys, bool load_private_key); @@ -62,9 +61,9 @@ TALER_TESTING_cmd_get_donau ( */ struct TALER_TESTING_Command TALER_TESTING_cmd_charity_get (const char *label, - const uint64_t charity_id, - const struct DONAU_BearerToken bearer, - unsigned int expected_response_code); + const uint64_t charity_id, + const struct DONAU_BearerToken bearer, + unsigned int expected_response_code); /** * Create a POST "charity" command. @@ -82,8 +81,8 @@ TALER_TESTING_cmd_charity_post (const char *label, char *url, char *max_per_year, char *receipts_to_date, - uint64_t current_year, - const struct DONAU_BearerToken bearer, + uint64_t current_year, + const struct DONAU_BearerToken bearer, unsigned int expected_response_code); struct TALER_TESTING_Command @@ -101,9 +100,9 @@ TALER_TESTING_cmd_charity_delete (const char *label, */ struct TALER_TESTING_Command TALER_TESTING_cmd_charities_get (const char *label, - unsigned int expected_response_code); + unsigned int expected_response_code); - /** +/** * Convenience function to run a test. * * @param argv command-line arguments given @@ -141,8 +140,11 @@ TALER_TESTING_get_donau_url ( * Call #op on all simple traits. */ #define DONAU_TESTING_SIMPLE_TRAITS(op) \ + op (charity_priv, const struct DONAU_CharityPrivateKeyP) \ + op (charity_pub, const struct DONAU_CharityPublicKeyP) \ + op (charity_id, const unsigned long long) \ op (donau_url, const char) \ - op (donau_keys, struct DONAU_Keys) + op (donau_keys, struct DONAU_Keys) /** @@ -150,7 +152,7 @@ TALER_TESTING_get_donau_url ( */ #define DONAU_TESTING_INDEXED_TRAITS(op) \ op (donation_unit_pub, const struct DONAU_DonationUnitInformation) \ - op (donau_pub, const struct TALER_ExchangePublicKeyP) + op (donau_pub, const struct TALER_ExchangePublicKeyP) DONAU_TESTING_SIMPLE_TRAITS (TALER_TESTING_MAKE_DECL_SIMPLE_TRAIT) DONAU_TESTING_INDEXED_TRAITS (TALER_TESTING_MAKE_DECL_INDEXED_TRAIT) diff --git a/src/testing/testing_api_cmd_charity_post.c b/src/testing/testing_api_cmd_charity_post.c @@ -41,7 +41,12 @@ struct StatusState /** * The charity POST request. */ - struct DONAU_CharityRequest *charity_req; + struct DONAU_CharityRequest charity_req; + + /** + * Private key of the charity, created here. + */ + struct DONAU_CharityPrivateKeyP charity_priv; /** * The bearer token for authorization. @@ -58,6 +63,11 @@ struct StatusState */ struct TALER_TESTING_Interpreter *is; + /** + * charity id + */ + unsigned long long charity_id; + }; @@ -74,7 +84,6 @@ charity_status_cb (void *cls, { struct StatusState *ss = cls; - ss->cph = NULL; if (ss->expected_response_code != gcr->hr.http_status) { @@ -89,6 +98,8 @@ charity_status_cb (void *cls, TALER_TESTING_interpreter_fail (ss->is); return; } + if (MHD_HTTP_OK == gcr->hr.http_status) + ss->charity_id = gcr->details.ok.charity_id; TALER_TESTING_interpreter_next (ss->is); } @@ -111,13 +122,14 @@ status_run (void *cls, ss->cph = DONAU_charity_post ( TALER_TESTING_interpreter_get_context (is), - "http://localhost:8080/", //TODO: TALER_TESTING_get_donau_url (is), - ss->charity_req, + "http://localhost:8080/", // TODO: TALER_TESTING_get_donau_url (is), + &ss->charity_req, ss->bearer, &charity_status_cb, ss); } + /** * Cleanup the state from a "reserve status" CMD, and possibly * cancel a pending operation thereof. @@ -133,9 +145,9 @@ status_cleanup (void *cls, if (NULL != ss->cph) { - // log incomplete command - TALER_TESTING_command_incomplete (ss->is, - cmd->label); + // log incomplete command + TALER_TESTING_command_incomplete (ss->is, + cmd->label); DONAU_charity_post_cancel (ss->cph); ss->cph = NULL; } @@ -143,53 +155,86 @@ status_cleanup (void *cls, } +/** + * Offer internal data from a "deposit" CMD, to other commands. + * + * @param cls closure. + * @param[out] ret result. + * @param trait name of the trait. + * @param index index number of the object to offer. + * @return #GNUNET_OK on success. + */ +static enum GNUNET_GenericReturnValue +charity_post_traits (void *cls, + const void **ret, + const char *trait, + unsigned int index) +{ + struct StatusState *ss = cls; + struct TALER_TESTING_Trait traits[] = { + TALER_TESTING_make_trait_charity_priv (&ss->charity_priv), + TALER_TESTING_make_trait_charity_pub (&ss->charity_req.charity_pub), + TALER_TESTING_make_trait_charity_id (&ss->charity_id), + TALER_TESTING_trait_end () + }; + + return TALER_TESTING_get_trait (traits, + ret, + trait, + index); +} + + struct TALER_TESTING_Command TALER_TESTING_cmd_charity_post (const char *label, - char charity_pub[256 / 8], - char *name, - char *url, - char *max_per_year, - char *receipts_to_date, - uint64_t current_year, - const struct DONAU_BearerToken bearer, - unsigned int expected_response_code) + const char *name, + const char *url, + const char *max_per_year, + const char *receipts_to_date, + uint64_t current_year, + const struct DONAU_BearerToken *bearer, + unsigned int expected_response_code) { struct StatusState *ss; + ss = GNUNET_new (struct StatusState); - GNUNET_memcpy(&ss->charity_req->charity_pub.eddsa_pub.q_y, charity_pub, sizeof(ss->charity_req->charity_pub.eddsa_pub.q_y)); - ss->charity_req->name = GNUNET_strdup (name); - ss->charity_req->charity_url = GNUNET_strdup (url); + GNUNET_CRYPTO_eddsa_key_create (&ss->charity_priv.eddsa_priv); + GNUNET_CRYPTO_eddsa_key_get_public (&ss->charity_priv.eddsa_priv, + &ss->charity_req.charity_pub.eddsa_pub); + ss->charity_req.name = name; + ss->charity_req.charity_url = url; // parse string max_per_year to amount if (GNUNET_OK != TALER_string_to_amount (max_per_year, - &ss->charity_req->max_per_year)) + &ss->charity_req.max_per_year)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to parse amount `%s' at %s\n", - max_per_year, + max_per_year, label); GNUNET_assert (0); } // parse string receipts_to_date to amount if (GNUNET_OK != TALER_string_to_amount (receipts_to_date, - &ss->charity_req->receipts_to_date)) + &ss->charity_req.receipts_to_date)) { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to parse amount `%s' at %s\n", - receipts_to_date, + receipts_to_date, label); GNUNET_assert (0); } - ss->charity_req->current_year = current_year; + ss->charity_req.current_year = current_year; ss->expected_response_code = expected_response_code; - ss->bearer = bearer; + ss->bearer = *bearer; { struct TALER_TESTING_Command cmd = { .cls = ss, .label = label, .run = &status_run, - .cleanup = &status_cleanup + .cleanup = &status_cleanup, + .traits = &charity_post_traits }; return cmd;