diff options
Diffstat (limited to 'src/exchange/taler-exchange-httpd_responses.h')
-rw-r--r-- | src/exchange/taler-exchange-httpd_responses.h | 143 |
1 files changed, 122 insertions, 21 deletions
diff --git a/src/exchange/taler-exchange-httpd_responses.h b/src/exchange/taler-exchange-httpd_responses.h index 9df5646cd..24b24621f 100644 --- a/src/exchange/taler-exchange-httpd_responses.h +++ b/src/exchange/taler-exchange-httpd_responses.h @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2014-2022 Taler Systems SA + Copyright (C) 2014-2023 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 @@ -24,24 +24,14 @@ */ #ifndef TALER_EXCHANGE_HTTPD_RESPONSES_H #define TALER_EXCHANGE_HTTPD_RESPONSES_H + #include <gnunet/gnunet_util_lib.h> #include <jansson.h> #include <microhttpd.h> #include "taler_error_codes.h" #include "taler-exchange-httpd.h" #include "taler-exchange-httpd_db.h" -#include <gnunet/gnunet_mhd_compat.h> - - -/** - * Compile the history of a reserve into a JSON object. - * - * @param rh reserve history to JSON-ify - * @return json representation of the @a rh, NULL on error - */ -json_t * -TEH_RESPONSE_compile_reserve_history ( - const struct TALER_EXCHANGEDB_ReserveHistory *rh); +#include "taler_exchangedb_plugin.h" /** @@ -63,6 +53,8 @@ TEH_RESPONSE_reply_unknown_denom_pub_hash ( * an insufficient balance for the given operation. * * @param connection connection to the client + * @param ec specific error code to return with the reserve history + * @param reserve_balance balance remaining in the reserve * @param balance_required the balance required for the operation * @param reserve_pub the reserve with insufficient balance * @return MHD result code @@ -70,24 +62,55 @@ TEH_RESPONSE_reply_unknown_denom_pub_hash ( MHD_RESULT TEH_RESPONSE_reply_reserve_insufficient_balance ( struct MHD_Connection *connection, + enum TALER_ErrorCode ec, + const struct TALER_Amount *reserve_balance, const struct TALER_Amount *balance_required, const struct TALER_ReservePublicKeyP *reserve_pub); +/** + * Return error message indicating that a reserve requires age + * restriction to be set during withdraw, that is: the age-withdraw + * protocol MUST be used with commitment to an admissible age. + * + * @param connection connection to the client + * @param maximum_allowed_age the balance required for the operation + * @return MHD result code + */ +MHD_RESULT +TEH_RESPONSE_reply_reserve_age_restriction_required ( + struct MHD_Connection *connection, + uint16_t maximum_allowed_age); + /** * Send information that a KYC check must be * satisfied to proceed to client. * * @param connection connection to the client + * @param h_payto account identifier to include in reply * @param kyc details about the KYC requirements * @return MHD result code */ MHD_RESULT TEH_RESPONSE_reply_kyc_required (struct MHD_Connection *connection, + const struct TALER_PaytoHashP *h_payto, const struct TALER_EXCHANGEDB_KycStatus *kyc); /** + * Send information that an AML process is blocking + * the operation right now. + * + * @param connection connection to the client + * @param status current AML status + * @return MHD result code + */ +MHD_RESULT +TEH_RESPONSE_reply_aml_blocked (struct MHD_Connection *connection, + enum TALER_AmlDecisionState status); + + +/** * Send assertion that the given denomination key hash * is not usable (typically expired) at this time. * @@ -138,6 +161,68 @@ TEH_RESPONSE_reply_coin_insufficient_funds ( const struct TALER_CoinSpendPublicKeyP *coin_pub); /** + * Send proof that a request is invalid to client because of + * an conflict with the provided denomination (the exchange had seen + * this coin before, signed by a different denomination). + * This function will create a message with the denomination's public key + * that was seen before. + * + * @param connection connection to the client + * @param ec error code to return + * @param coin_pub the public key of the coin + * @param prev_denom_pub the denomination of the coin, as seen previously + * @param prev_denom_sig the signature with the denomination key over the coin + * @return MHD result code + */ +MHD_RESULT +TEH_RESPONSE_reply_coin_denomination_conflict ( + struct MHD_Connection *connection, + enum TALER_ErrorCode ec, + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_DenominationPublicKey *prev_denom_pub, + const struct TALER_DenominationSignature *prev_denom_sig); + +/** + * Send the salted hash of the merchant's bank account from conflicting + * contract. With this information, the merchant's private key and + * the hash of the contract terms, the client can retrieve more details + * about the conflicting deposit + * + * @param connection connection to the client + * @param ec error code to return + * @param h_wire the salted hash of the merchant's bank account + * @return MHD result code + */ +MHD_RESULT +TEH_RESPONSE_reply_coin_conflicting_contract ( + struct MHD_Connection *connection, + enum TALER_ErrorCode ec, + const struct TALER_MerchantWireHashP *h_wire); + +/** + * Send proof that a request is invalid to client because of + * a conflicting value for the age commitment hash of a coin. + * This function will create a message with the conflicting + * hash value for the age commitment of the given coin. + * + * @param connection connection to the client + * @param ec error code to return + * @param cks specific conflict type + * @param h_denom_pub hash of the denomination of the coin + * @param coin_pub public key of the coin + * @param h_age_commitment hash of the age commitment as found in the database + * @return MHD result code + */ +MHD_RESULT +TEH_RESPONSE_reply_coin_age_commitment_conflict ( + struct MHD_Connection *connection, + enum TALER_ErrorCode ec, + enum TALER_EXCHANGEDB_CoinKnownStatus cks, + const struct TALER_DenominationHashP *h_denom_pub, + const struct TALER_CoinSpendPublicKeyP *coin_pub, + const struct TALER_AgeCommitmentHash *h_age_commitment); + +/** * Fundamental details about a purse. */ struct TEH_PurseDetails @@ -183,16 +268,32 @@ TEH_RESPONSE_reply_purse_created ( /** - * Compile the transaction history of a coin into a JSON object. + * Callback used to set headers in a response. * - * @param coin_pub public key of the coin - * @param tl transaction history to JSON-ify - * @return json representation of the @a rh, NULL on error + * @param cls closure + * @param[in,out] resp response to modify */ -json_t * -TEH_RESPONSE_compile_transaction_history ( - const struct TALER_CoinSpendPublicKeyP *coin_pub, - const struct TALER_EXCHANGEDB_TransactionList *tl); +typedef void +(*TEH_RESPONSE_SetHeaders)(void *cls, + struct MHD_Response *resp); + + +/** + * Generate a HTTP "Not modified" response with the + * given @a etags. + * + * @param connection connection to queue response on + * @param etags ETag header to set + * @param cb callback to modify response headers + * @param cb_cls closure for @a cb + * @return MHD result code + */ +MHD_RESULT +TEH_RESPONSE_reply_not_modified ( + struct MHD_Connection *connection, + const char *etags, + TEH_RESPONSE_SetHeaders cb, + void *cb_cls); #endif |