summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_auditors.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/taler-merchant-httpd_auditors.c')
-rw-r--r--src/backend/taler-merchant-httpd_auditors.c265
1 files changed, 0 insertions, 265 deletions
diff --git a/src/backend/taler-merchant-httpd_auditors.c b/src/backend/taler-merchant-httpd_auditors.c
deleted file mode 100644
index a1d70053..00000000
--- a/src/backend/taler-merchant-httpd_auditors.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- This file is part of TALER
- (C) 2014-2021 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
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-*/
-/**
- * @file taler-merchant-httpd_auditors.c
- * @brief logic this HTTPD keeps for each exchange we interact with
- * @author Marcello Stanisci
- * @author Christian Grothoff
- */
-#include "platform.h"
-#include <taler/taler_json_lib.h>
-#include "taler-merchant-httpd_auditors.h"
-
-/**
- * Our representation of an auditor.
- */
-struct Auditor
-{
- /**
- * Auditor's legal name.
- */
- char *name;
-
- /**
- * Auditor's URL.
- */
- char *url;
-
- /**
- * Public key of the auditor.
- */
- struct TALER_AuditorPublicKeyP public_key;
-
-};
-
-
-/**
- * Array of the auditors this merchant is willing to accept.
- */
-static struct Auditor *auditors;
-
-/**
- * The length of the #auditors array.
- */
-static unsigned int nauditors;
-
-/**
- * JSON representation of the auditors accepted by this exchange.
- */
-json_t *j_auditors;
-
-
-enum GNUNET_GenericReturnValue
-TMH_AUDITORS_check_dk (struct TALER_EXCHANGE_Handle *mh,
- const struct TALER_EXCHANGE_DenomPublicKey *dk,
- bool exchange_trusted,
- unsigned int *hc,
- enum TALER_ErrorCode *ec)
-{
- const struct TALER_EXCHANGE_Keys *keys;
- const struct TALER_EXCHANGE_AuditorInformation *ai;
-
- if (GNUNET_TIME_absolute_is_past (dk->expire_deposit.abs_time))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Denomination key offered by client has expired for deposits\n");
- *hc = MHD_HTTP_GONE;
- *ec = TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_DEPOSIT_EXPIRED;
- return GNUNET_SYSERR; /* expired */
- }
- if (exchange_trusted)
- {
- *ec = TALER_EC_NONE;
- *hc = MHD_HTTP_OK;
- return GNUNET_OK;
- }
- keys = TALER_EXCHANGE_get_keys (mh);
- if (NULL == keys)
- {
- /* this should never happen, keys should have been successfully
- obtained before we even got into this function */
- GNUNET_break (0);
- *ec = TALER_EC_GENERIC_INTERNAL_INVARIANT_FAILURE;
- *hc = MHD_HTTP_INTERNAL_SERVER_ERROR;
- return GNUNET_SYSERR;
- }
- for (unsigned int i = 0; i<keys->num_auditors; i++)
- {
- ai = &keys->auditors[i];
- for (unsigned int j = 0; j<nauditors; j++)
- {
- if (0 == GNUNET_memcmp (&ai->auditor_pub,
- &auditors[j].public_key))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Found supported auditor `%s' (%s)\n",
- auditors[j].name,
- TALER_B2S (&auditors[j].public_key));
- }
- for (unsigned int k = 0; k<ai->num_denom_keys; k++)
- if (&keys->denom_keys[k] == dk)
- {
- *ec = TALER_EC_NONE;
- *hc = MHD_HTTP_OK;
- return GNUNET_OK;
- }
- }
- }
- GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
- "Denomination key %s offered by client not audited by any accepted auditor\n",
- GNUNET_h2s (&dk->h_key.hash));
- *hc = MHD_HTTP_BAD_REQUEST;
- *ec = TALER_EC_MERCHANT_POST_ORDERS_ID_PAY_DENOMINATION_KEY_AUDITOR_FAILURE;
- return GNUNET_NO;
-}
-
-
-/**
- * Function called on each configuration section. Finds sections
- * about auditors and parses the entries.
- *
- * @param cls closure, with a `const struct GNUNET_CONFIGURATION_Handle *`
- * @param section name of the section
- */
-static void
-parse_auditors (void *cls,
- const char *section)
-{
- const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
- char *pks;
- struct Auditor auditor;
- char *currency;
-
- if (0 != strncasecmp (section,
- "merchant-auditor-",
- strlen ("merchant-auditor-")))
- return;
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg,
- section,
- "CURRENCY",
- &currency))
- {
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- section,
- "CURRENCY");
- return;
- }
- if (0 != strcasecmp (currency,
- TMH_currency))
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Auditor given in section `%s' is for another currency. Skipping.\n",
- section);
- GNUNET_free (currency);
- return;
- }
- GNUNET_free (currency);
- auditor.name = GNUNET_strdup (&section[strlen ("merchant-auditor-")]);
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg,
- section,
- "AUDITOR_BASE_URL",
- &auditor.url))
- {
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- section,
- "URL");
- GNUNET_free (auditor.name);
- return;
- }
- if (GNUNET_OK !=
- GNUNET_CONFIGURATION_get_value_string (cfg,
- section,
- "AUDITOR_KEY",
- &pks))
- {
- GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
- section,
- "AUDITOR_KEY");
- GNUNET_free (auditor.name);
- GNUNET_free (auditor.url);
- return;
- }
- if (GNUNET_OK !=
- GNUNET_CRYPTO_eddsa_public_key_from_string (pks,
- strlen (pks),
- &auditor.public_key.eddsa_pub))
- {
- GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
- section,
- "AUDITOR_KEY",
- "need a valid EdDSA public key");
- GNUNET_free (auditor.name);
- GNUNET_free (auditor.url);
- GNUNET_free (pks);
- return;
- }
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- "Loaded key data of auditor `%s' (%s)\n",
- auditor.name,
- TALER_B2S (&auditor.public_key));
- GNUNET_free (pks);
- GNUNET_array_append (auditors,
- nauditors,
- auditor);
-}
-
-
-int
-TMH_AUDITORS_init (const struct GNUNET_CONFIGURATION_Handle *cfg)
-{
- GNUNET_CONFIGURATION_iterate_sections (cfg,
- &parse_auditors,
- (void *) cfg);
-
- /* Generate preferred exchange(s) array. */
- j_auditors = json_array ();
- for (unsigned int cnt = 0; cnt < nauditors; cnt++)
- GNUNET_assert (0 ==
- json_array_append_new (
- j_auditors,
- GNUNET_JSON_PACK (
- GNUNET_JSON_pack_string ("name",
- auditors[cnt].name),
- GNUNET_JSON_pack_data_auto ("auditor_pub",
- &auditors[cnt].public_key),
- GNUNET_JSON_pack_string ("url",
- auditors[cnt].url))));
- return nauditors;
-}
-
-
-/**
- * Release auditor information state.
- */
-void
-TMH_AUDITORS_done ()
-{
- json_decref (j_auditors);
- j_auditors = NULL;
- for (unsigned int i = 0; i<nauditors; i++)
- {
- GNUNET_free (auditors[i].name);
- GNUNET_free (auditors[i].url);
- }
- GNUNET_free (auditors);
- auditors = NULL;
- nauditors = 0;
-}
-
-
-/* end of taler-merchant-httpd_auditors.c */