diff options
Diffstat (limited to 'src/exchange/taler-exchange-httpd.h')
-rw-r--r-- | src/exchange/taler-exchange-httpd.h | 215 |
1 files changed, 192 insertions, 23 deletions
diff --git a/src/exchange/taler-exchange-httpd.h b/src/exchange/taler-exchange-httpd.h index 512fae8f0..25e9e1105 100644 --- a/src/exchange/taler-exchange-httpd.h +++ b/src/exchange/taler-exchange-httpd.h @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014, 2015, 2020 Taler Systems SA + Copyright (C) 2014-2022 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software @@ -25,7 +25,10 @@ #include <microhttpd.h> #include "taler_json_lib.h" -#include "taler_crypto_lib.h" +#include "taler_util.h" +#include "taler_kyclogic_plugin.h" +#include "taler_extensions.h" +#include <gnunet/gnunet_mhd_compat.h> /** @@ -34,9 +37,14 @@ extern struct GNUNET_TIME_Relative TEH_max_keys_caching; /** + * How long is the delay before we close reserves? + */ +extern struct GNUNET_TIME_Relative TEH_reserve_closing_delay; + +/** * The exchange's configuration. */ -extern struct GNUNET_CONFIGURATION_Handle *TEH_cfg; +extern const struct GNUNET_CONFIGURATION_Handle *TEH_cfg; /** * Main directory with exchange data. @@ -44,6 +52,11 @@ extern struct GNUNET_CONFIGURATION_Handle *TEH_cfg; extern char *TEH_exchange_directory; /** + * -I command-line flag given? + */ +extern int TEH_check_invariants_flag; + +/** * Are clients allowed to request /keys for times other than the * current time? Allowing this could be abused in a DoS-attack * as building new /keys responses is expensive. Should only be @@ -52,21 +65,160 @@ extern char *TEH_exchange_directory; extern int TEH_allow_keys_timetravel; /** + * Option set to #GNUNET_YES if rewards are allowed. + */ +extern int TEH_enable_rewards; + +/** * Main directory with revocation data. */ extern char *TEH_revocation_directory; /** + * True if we should commit suicide once all active + * connections are finished. Also forces /keys requests + * to terminate if they are long-polling. + */ +extern bool TEH_suicide; + +/** * Master public key (according to the * configuration in the exchange directory). */ extern struct TALER_MasterPublicKeyP TEH_master_public_key; /** + * Key used to encrypt KYC attribute data in our database. + */ +extern struct TALER_AttributeEncryptionKeyP TEH_attribute_key; + +/** * Our DB plugin. */ extern struct TALER_EXCHANGEDB_Plugin *TEH_plugin; +/** + * Absolute STEFAN parameter. + */ +extern struct TALER_Amount TEH_stefan_abs; + +/** + * Logarithmic STEFAN parameter. + */ +extern struct TALER_Amount TEH_stefan_log; + +/** + * Linear STEFAN parameter. + */ +extern float TEH_stefan_lin; + +/** + * Default ways how to render #TEH_currency amounts. + */ +extern const struct TALER_CurrencySpecification *TEH_cspec; + +/** + * Our currency. + */ +extern char *TEH_currency; + +/** + * Name of the KYC-AML-trigger evaluation binary. + */ +extern char *TEH_kyc_aml_trigger; + +/** + * What is the largest amount we allow a peer to + * merge into a reserve before always triggering + * an AML check? + */ +extern struct TALER_Amount TEH_aml_threshold; + +/** + * Our (externally visible) base URL. + */ +extern char *TEH_base_url; + +/** + * Are we shutting down? + */ +extern volatile bool MHD_terminating; + +/** + * Context for all CURL operations (useful to the event loop) + */ +extern struct GNUNET_CURL_Context *TEH_curl_ctx; + +/* + * Signature of the offline master key of all enabled extensions' configuration + */ +extern struct TALER_MasterSignatureP TEH_extensions_sig; +extern bool TEH_extensions_signed; + +/** + * @brief Struct describing an URL and the handler for it. + */ +struct TEH_RequestHandler; + + +/** + * @brief Context in which the exchange is processing + * all requests + */ +struct TEH_RequestContext +{ + + /** + * Async Scope ID associated with this request. + */ + struct GNUNET_AsyncScopeId async_scope_id; + + /** + * When was this request started? + */ + struct GNUNET_TIME_Absolute start_time; + + /** + * Opaque parsing context. + */ + void *opaque_post_parsing_context; + + /** + * Request handler responsible for this request. + */ + const struct TEH_RequestHandler *rh; + + /** + * Request URL (for logging). + */ + const char *url; + + /** + * Connection we are processing. + */ + struct MHD_Connection *connection; + + /** + * JSON root of uploaded data (or NULL, if none). + */ + json_t *root; + + /** + * @e rh-specific cleanup routine. Function called + * upon completion of the request that should + * clean up @a rh_ctx. Can be NULL. + */ + void + (*rh_cleaner)(struct TEH_RequestContext *rc); + + /** + * @e rh-specific context. Place where the request + * handler can associate state with this request. + * Can be NULL. + */ + void *rh_ctx; +}; + /** * @brief Struct describing an URL and the handler for it. @@ -91,43 +243,45 @@ struct TEH_RequestHandler union { /** - * Function to call to handle a GET requests (and those + * Function to call to handle GET requests (and those * with @e method NULL). * - * @param rh this struct - * @param mime_type the @e mime_type for the reply (hint, can be NULL) - * @param connection the MHD connection to handle + * @param rc context for the request * @param args array of arguments, needs to be of length @e args_expected * @return MHD result code */ - int (*get)(const struct TEH_RequestHandler *rh, - struct MHD_Connection *connection, - const char *const args[]); + MHD_RESULT + (*get)(struct TEH_RequestContext *rc, + const char *const args[]); /** - * Function to call to handle a POST request. + * Function to call to handle POST requests. * - * @param rh this struct - * @param mime_type the @e mime_type for the reply (hint, can be NULL) - * @param connection the MHD connection to handle + * @param rc context for the request * @param json uploaded JSON data - * @param args array of arguments, needs to be of length @e args_expected + * @param args array of arguments, needs to be of length @e nargs * @return MHD result code */ - int (*post)(const struct TEH_RequestHandler *rh, - struct MHD_Connection *connection, - const json_t *root, + MHD_RESULT + (*post)(struct TEH_RequestContext *rc, + const json_t *root, + const char *const args[]); + + /** + * Function to call to handle DELETE requests. + * + * @param rc context for the request + * @param args array of arguments, needs to be of length @e nargs + * @return MHD result code + */ + MHD_RESULT + (*delete)(struct TEH_RequestContext *rc, const char *const args[]); } handler; /** - * Number of arguments this handler expects in the @a args array. - */ - unsigned int nargs; - - /** * Mime type to use in reply (hint, can be NULL). */ const char *mime_type; @@ -146,7 +300,22 @@ struct TEH_RequestHandler * Default response code. 0 for none provided. */ unsigned int response_code; + + /** + * Number of arguments this handler expects in the @a args array. + */ + unsigned int nargs; + + /** + * Is the number of arguments given in @e nargs only an upper bound, + * and calling with fewer arguments could be OK? + */ + bool nargs_is_upper_bound; }; +/* Age restriction configuration */ +extern bool TEH_age_restriction_enabled; +extern struct TALER_AgeRestrictionConfig TEH_age_restriction_config; + #endif |